共计 2891 个字符,预计需要花费 8 分钟才能阅读完成。
在日常工作中,我们经常需要对大量文件进行批量处理,例如重命名、复制、移动、删除等操作。Python 提供了强大的 os 和 shutil 模块,能够方便地实现文件的批量操作。本节将重点介绍如何使用 Python 实现文件的批量操作与自动化处理。
- 批量重命名文件
在某些场景中,我们可能需要对多个文件进行批量重命名。例如,我们需要将文件夹中的所有.txt文件改为file1.txt、file2.txt、file3.txt等格式。
import os
def batch_rename_files(folder_path, prefix):
files = os.listdir(folder_path)
index = 1
for filename in files:
if filename.endswith(".txt"):
new_name = f"{prefix}{index}.txt"
old_path = os.path.join(folder_path, filename)
new_path = os.path.join(folder_path, new_name)
os.rename(old_path, new_path)
print(f" 重命名:{filename} -> {new_name}")
index += 1
# 批量重命名文件夹中的 .txt 文件
batch_rename_files("./my_folder", "file")
此代码遍历指定目录,重命名所有 .txt 文件,按顺序编号。
- 批量移动文件
在文件管理过程中,批量移动文件也非常常见。我们可以将指定类型的文件移动到目标文件夹中:
import os
import shutil
def move_files_to_folder(folder_path, target_folder, file_extension=".txt"):
if not os.path.exists(target_folder):
os.makedirs(target_folder)
files = os.listdir(folder_path)
for filename in files:
if filename.endswith(file_extension):
old_path = os.path.join(folder_path, filename)
new_path = os.path.join(target_folder, filename)
shutil.move(old_path, new_path)
print(f" 文件移动:{filename} -> {target_folder}")
# 批量移动 .txt 文件到 target_folder
move_files_to_folder("./my_folder", "./target_folder", ".txt")
此方法将所有指定类型的文件移动到目标目录中。
- 批量复制文件
我们也可以使用shutil.copy()来批量复制文件:
import os
import shutil
def copy_files_to_folder(folder_path, target_folder, file_extension=".txt"):
if not os.path.exists(target_folder):
os.makedirs(target_folder)
files = os.listdir(folder_path)
for filename in files:
if filename.endswith(file_extension):
old_path = os.path.join(folder_path, filename)
new_path = os.path.join(target_folder, filename)
shutil.copy(old_path, new_path)
print(f" 文件复制:{filename} -> {target_folder}")
# 批量复制 .txt 文件到 target_folder
copy_files_to_folder("./my_folder", "./target_folder", ".txt")
这种方法能够在不删除源文件的情况下,将文件复制到目标文件夹。
- 批量删除文件
有时我们需要删除某一类型的文件,或者删除指定目录下的所有文件。可以使用os.remove()删除文件:
import os
def delete_files_in_folder(folder_path, file_extension=".txt"):
files = os.listdir(folder_path)
for filename in files:
if filename.endswith(file_extension):
file_path = os.path.join(folder_path, filename)
os.remove(file_path)
print(f" 文件删除:{filename}")
# 批量删除 .txt 文件
delete_files_in_folder("./my_folder", ".txt")
此方法会删除指定目录中所有的 .txt 文件。
- 批量操作多个文件夹
如果需要对多个文件夹中的文件进行操作,可以使用os.walk()遍历每个子目录:
import os
import shutil
def batch_move_across_multiple_folders(src_folder, target_folder, file_extension=".txt"):
if not os.path.exists(target_folder):
os.makedirs(target_folder)
for root, dirs, files in os.walk(src_folder):
for filename in files:
if filename.endswith(file_extension):
old_path = os.path.join(root, filename)
new_path = os.path.join(target_folder, filename)
shutil.move(old_path, new_path)
print(f" 文件移动:{filename} -> {target_folder}")
# 批量移动多个文件夹中的 .txt 文件
batch_move_across_multiple_folders("./src_folder", "./target_folder", ".txt")
此方法将递归遍历源文件夹及其所有子文件夹,批量移动符合条件的文件。
总结:
通过 os 和 shutil 模块,Python 可以轻松实现文件的批量操作,如批量重命名、复制、移动和删除等。结合这些功能,我们可以在文件管理、数据处理和自动化脚本中显著提高效率。
练习与思考:
- 修改
batch_rename_files()函数,使其支持批量重命名不同扩展名的文件。 - 编写一个程序,将指定目录下的所有图像文件(如
.jpg,.png)批量转换为.jpeg格式。 - 使用
os.walk()递归遍历多个目录,删除所有.log文件。
正文完