方法一:自动重命名文件
有时候,我们需要批量重命名文件,比如整理照片或文档时。Python 的 os 模块提供了许多文件操作的功能,包括重命名。
步骤:
- 导入 os 模块
- 获取文件列表。
- 为每个文件生成新名字。
- 重命名文件。
代码示例:
import os
def rename_files(directory, prefix="new_"):
"""
批量重命名指定目录下的所有文件。
:param directory: 目标目录路径
:param prefix: 新文件名前缀,默认为 'new_'
"""
# 获取目录下所有文件
files = os.listdir(directory)
# 遍历每个文件
for filename in files:
# 跳过隐藏文件(以 . 开头)
if not filename.startswith('.'):
# 构建完整文件路径
old_path = os.path.join(directory, filename)
new_name = prefix + filename
new_path = os.path.join(directory, new_name)
# 重命名文件
os.rename(old_path, new_path)
print(f"Renamed '{filename}' to '{new_name}'")
# 测试函数
directory_path = "path/to/your/directory"
rename_files(directory_path)
输出:
Renamed 'old_file.txt' to 'new_old_file.txt'
Renamed 'image.jpg' to 'new_image.jpg'
...
解释:
- os.listdir() 返回指定目录下的文件列表。
- os.path.join() 用于构建完整的文件路径。
- os.rename() 用于重命名文件。
方法二:自动移动文件
当你的文件夹里有很多不同类型的文件时,可能需要将它们按类型分类存放。
步骤:
- 定义目标文件夹。
- 创建目标文件夹(如果不存在)。
- 移动文件到目标文件夹。
代码示例:
import os
import shutil
def move_files_by_type(directory):
"""
根据文件类型移动文件到不同的文件夹。
:param directory: 目标目录路径
"""
# 文件类型及其对应的文件夹
file_types = {
'.txt': 'TextFiles',
'.jpg': 'Images',
'.mp3': 'Music',
'.mp4': 'Videos',
'.pdf': 'Documents'
}
# 获取目录下所有文件
files = os.listdir(directory)
# 遍历每个文件
for filename in files:
# 获取文件扩展名
extension = os.path.splitext(filename)[1]
# 如果是已知类型
if extension in file_types:
target_folder = file_types[extension]
# 创建目标文件夹(如果不存在)
target_dir = os.path.join(directory, target_folder)
if not os.path.exists(target_dir):
os.makedirs(target_dir)
# 构建源文件路径和目标文件路径
source_path = os.path.join(directory, filename)
target_path = os.path.join(target_dir, filename)
# 移动文件
shutil.move(source_path, target_path)
print(f"Moved '{filename}' to '{target_folder}'")
else:
print(f"Ignored '{filename}' (unknown type)")
# 测试函数
directory_path = "path/to/your/directory"
move_files_by_type(directory_path)
输出:
Moved 'document.pdf' to 'Documents'
Moved 'image.jpg' to 'Images'
Moved 'song.mp3' to 'Music'
...
解释:
- os.path.splitext() 用于获取文件扩展名。
- shutil.move() 用于移动文件。
- os.makedirs() 用于创建多级目录。
方法三:批量压缩文件
有时你需要将多个文件打包成一个压缩文件,以便发送或存储。Python 的 zipfile 模块可以帮助你轻松实现这一功能。
步骤:
- 导入 zipfile 模块。
- 创建一个新的压缩文件。
- 将指定目录下的文件添加到压缩文件中。
代码示例:
import os
import zipfile
def zip_files(directory, output_zip="archive.zip"):
"""
将指定目录下的所有文件压缩到一个 ZIP 文件中。
:param directory: 目标目录路径
:param output_zip: 输出的 ZIP 文件名,默认为 'archive.zip'
"""
# 创建一个新的 ZIP 文件
with zipfile.ZipFile(output_zip, 'w', zipfile.ZIP_DEFLATED) as zipf:
# 获取目录下所有文件
files = os.listdir(directory)
# 遍历每个文件
for filename in files:
# 跳过隐藏文件(以 . 开头)
if not filename.startswith('.'):
# 构建完整文件路径
file_path = os.path.join(directory, filename)
# 添加文件到 ZIP 文件
zipf.write(file_path, arcname=filename)
print(f"Added '{filename}' to '{output_zip}'")
# 测试函数
directory_path = "path/to/your/directory"
zip_files(directory_path)
输出:
Added 'document.pdf' to 'archive.zip'
Added 'image.jpg' to 'archive.zip'
Added 'song.mp3' to 'archive.zip'
...
解释:
- zipfile.ZipFile() 用于创建一个新的 ZIP 文件。
- zipf.write() 用于将文件添加到 ZIP 文件中。
- arcname 参数用于指定文件在 ZIP 文件中的名称。
方法四:自动解压缩文件
与压缩文件相对应,解压缩文件同样重要。你可以使用 zipfile 模块来解压 ZIP 文件。
步骤:
- 导入 zipfile 模块。
- 打开 ZIP 文件。
- 解压文件到指定目录。
代码示例:
import os
import zipfile
def unzip_files(zip_file, output_directory="unzipped"):
"""
解压指定的 ZIP 文件到指定目录。
:param zip_file: ZIP 文件路径
:param output_directory: 输出目录,默认为 'unzipped'
"""
# 创建输出目录(如果不存在)
if not os.path.exists(output_directory):
os.makedirs(output_directory)
# 打开 ZIP 文件
with zipfile.ZipFile(zip_file, 'r') as zipf:
# 解压所有文件到指定目录
zipf.extractall(output_directory)
print(f"Extracted all files from '{zip_file}' to '{output_directory}'")
# 测试函数
zip_file_path = "path/to/your/archive.zip"
unzip_files(zip_file_path)
输出:
Extracted all files from 'archive.zip' to 'unzipped'
解释:
- zipfile.ZipFile() 用于打开 ZIP 文件。
- zipf.extractall() 用于解压所有文件到指定目录。
实战案例分析:自动化文件管理脚本
假设你有一个文件夹 Documents,里面包含了大量的 PDF 文档、图片和其他文件。你希望:
- 重命名所有 PDF 文件,前缀为 new_。
- 将所有 PDF 文件移动到 PDF_Docs 文件夹。
- 将所有图片(.jpg, .png)移动到 Images 文件夹。
- 将剩余文件压缩成一个 ZIP 文件。
代码示例:
import os
import shutil
import zipfile
def manage_files(directory):
"""
自动化文件管理脚本。
:param directory: 目标目录路径
"""
# 1. 重命名所有 PDF 文件
pdf_files = [f for f in os.listdir(directory) if f.endswith('.pdf')]
for filename in pdf_files:
old_path = os.path.join(directory, filename)
new_name = 'new_' + filename
new_path = os.path.join(directory, new_name)
os.rename(old_path, new_path)
print(f"Renamed '{filename}' to '{new_name}'")
# 2. 移动所有 PDF 文件到 PDF_Docs 文件夹
pdf_target_dir = os.path.join(directory, 'PDF_Docs')
if not os.path.exists(pdf_target_dir):
os.makedirs(pdf_target_dir)
for filename in pdf_files:
old_path = os.path.join(directory, 'new_' + filename)
new_path = os.path.join(pdf_target_dir, filename)
shutil.move(old_path, new_path)
print(f"Moved '{filename}' to 'PDF_Docs'")
# 3. 移动所有图片到 Images 文件夹
image_files = [f for f in os.listdir(directory) if f.endswith(('.jpg', '.png'))]
images_target_dir = os.path.join(directory, 'Images')
if not os.path.exists(images_target_dir):
os.makedirs(images_target_dir)
for filename in image_files:
old_path = os.path.join(directory, filename)
new_path = os.path.join(images_target_dir, filename)
shutil.move(old_path, new_path)
print(f"Moved '{filename}' to 'Images'")
# 4. 剩余文件压缩成一个 ZIP 文件
remaining_files = [f for f in os.listdir(directory) if f not in pdf_files and f not in image_files]
zip_file = os.path.join(directory, 'remaining_files.zip')
with zipfile.ZipFile(zip_file, 'w', zipfile.ZIP_DEFLATED) as zipf:
for filename in remaining_files:
file_path = os.path.join(directory, filename)
zipf.write(file_path, arcname=filename)
print(f"Added '{filename}' to 'remaining_files.zip'")
print("All tasks completed successfully!")
# 测试函数
directory_path = "path/to/your/Documents"
manage_files(directory_path)
输出:
Renamed 'report.pdf' to 'new_report.pdf'
Moved 'report.pdf' to 'PDF_Docs'
Moved 'image.jpg' to 'Images'
Added 'data.csv' to 'remaining_files.zip'
All tasks completed successfully!
解释:
- 重命名 PDF 文件: 使用列表推导式筛选出所有 PDF 文件,并逐个重命名。
- 移动 PDF 文件: 创建 PDF_Docs 文件夹,并将所有 PDF 文件移动进去。
- 移动图片文件: 创建 Images 文件夹,并将所有图片文件移动进去。
- 压缩剩余文件: 将剩余文件压缩成一个 ZIP 文件。
总结
本文介绍了如何利用 Python 进行批量文件管理,包括重命名文件、按类型移动文件、批量压缩文件以及解压缩文件等操作。通过具体的代码示例,展示了这些任务的实现方法。这些技术可以帮助用户高效地组织和处理大量文件,提高工作效率。