查看当前工作目录
首先,我们来看看如何查看当前的工作目录。这在处理文件路径时非常有用。
import os
# 获取当前工作目录
current_directory = os.getcwd()
print("当前工作目录:", current_directory)
输出:
当前工作目录: /path/to/your/current/directory
列出目录下的所有文件
接下来,我们学习如何列出目录下的所有文件。这对于自动化脚本来说非常重要。
import os
# 列出当前目录下的所有文件
files = os.listdir('.')
for file in files:
print(file)
输出:
file1.txt
file2.jpg
folder1
创建新目录
有时我们需要创建一个新的目录来组织文件。下面是一个简单的例子。
import os
# 创建新目录
new_dir = 'new_folder'
os.mkdir(new_dir)
print(f"新目录 {new_dir} 已创建")
输出:
新目录 new_folder 已创建
删除目录
当不再需要某个目录时,我们可以将其删除。
import os
# 删除目录
dir_to_remove = 'new_folder'
os.rmdir(dir_to_remove)
print(f"目录 {dir_to_remove} 已删除")
输出:
目录 new_folder 已删除
运行外部命令
Python允许我们直接运行外部命令。这对于执行一些特定的任务非常方便。
import subprocess
# 运行外部命令
command = "ls -l"
result = subprocess.run(command, shell=True, text=True, capture_output=True)
print(result.stdout)
输出:
total 0
drwxr-xr-x 2 user user 4096 Mar 1 14:00 folder1
-rw-r--r-- 1 user user 0 Mar 1 14:00 file1.txt
获取系统信息
获取系统信息可以帮助我们更好地了解运行环境。
import platform
# 获取系统信息
info = platform.uname()
print(f"系统名称: {info.system}")
print(f"节点名称: {info.node}")
print(f"版本: {info.release}")
输出:
系统名称: Linux
节点名称: mycomputer
版本: 5.4.0-77-generic
监听文件变化
有时候我们需要监控文件或目录的变化,例如自动备份等。
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
class MyHandler(FileSystemEventHandler):
def on_modified(self, event):
print(f"{event.src_path} 已修改")
if __name__ == "__main__":
path = "."
event_handler = MyHandler()
observer = Observer()
observer.schedule(event_handler, path, recursive=True)
observer.start()
try:
while True:
pass
except KeyboardInterrupt:
observer.stop()
observer.join()
这段代码会监听当前目录下所有文件的变化,并打印出修改的信息。
复制文件
复制文件是日常工作中常见的需求之一。Python中的shutil模块提供了复制文件的功能。
import shutil
# 源文件和目标文件
source_file = 'file1.txt'
destination_file = 'copy_of_file1.txt'
# 复制文件
shutil.copy(source_file, destination_file)
print(f"文件 {source_file} 已复制为 {destination_file}")
输出:
文件 file1.txt 已复制为 copy_of_file1.txt
移动文件
除了复制文件外,移动文件也是常见的需求。同样使用shutil模块可以实现。
import shutil
# 源文件和目标文件
source_file = 'copy_of_file1.txt'
destination_file = 'folder1/moved_file1.txt'
# 移动文件
shutil.move(source_file, destination_file)
print(f"文件 {source_file} 已移动到 {destination_file}")
输出:
文件 copy_of_file1.txt 已移动到 folder1/moved_file1.txt
文件权限管理
在某些情况下,我们需要对文件的权限进行管理,比如更改文件的所有者或者设置文件权限。
import os
# 文件路径
file_path = 'folder1/moved_file1.txt'
# 更改文件权限
os.chmod(file_path, 0o777) # 设置文件权限为可读、可写、可执行
print(f"文件 {file_path} 的权限已更改为 0777")
# 更改文件所有者
# 在Linux中,可以使用os.chown()方法更改文件所有者
# 但在Python中通常不推荐这样做,因为需要root权限
# 如果确实需要,可以使用以下代码:
# os.chown(file_path, uid, gid)
print(f"文件 {file_path} 的权限已更改为 0777")
输出:
文件 folder1/moved_file1.txt 的权限已更改为 0777
文件 folder1/moved_file1.txt 的权限已更改为 0777
实战案例:自动备份工具
假设你有一个重要的文件夹,需要定期进行备份。我们可以编写一个Python脚本来自动完成这个任务。下面是一个简单的例子:
import os
import shutil
import datetime
def backup_files(source_folder, backup_folder):
# 获取当前日期和时间
now = datetime.datetime.now()
timestamp = now.strftime("%Y%m%d_%H%M%S")
# 创建备份目录
backup_subfolder = os.path.join(backup_folder, timestamp)
os.makedirs(backup_subfolder, exist_ok=True)
# 复制文件
for root, dirs, files in os.walk(source_folder):
for file in files:
source_file = os.path.join(root, file)
relative_path = os.path.relpath(source_file, source_folder)
destination_file = os.path.join(backup_subfolder, relative_path)
os.makedirs(os.path.dirname(destination_file), exist_ok=True)
shutil.copy2(source_file, destination_file)
print(f"备份完成:{source_folder} -> {backup_subfolder}")
if __name__ == "__main__":
source_folder = '/path/to/source/folder'
backup_folder = '/path/to/backup/folder'
backup_files(source_folder, backup_folder)
分析:
- 获取当前日期和时间:使用datetime模块获取当前的时间戳。
- 创建备份目录:根据时间戳创建一个新的子目录。
- 复制文件:遍历源文件夹中的所有文件,并将它们复制到备份目录中。
这个脚本可以在定时任务中运行,例如每天凌晨自动执行一次,以确保数据的安全性。