使用 Python 進行文件管理的四個聰明方法
本文將介紹如何使用 Python 進行文件管理和自動化處理,包括批量重命名文件、按類型移動文件、批量壓縮文件以及解壓縮文件等常見任務。通過具體的代碼示例,讀者可以快速上手并應用于實際項目中。
方法一:自動重命名文件
有時候,我們需要批量重命名文件,比如整理照片或文檔時。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() 用于重命名文件。
方法二:自動移動文件
當你的文件夾里有很多不同類型的文件時,可能需要將它們按類型分類存放。
步驟:
- 定義目標文件夾。
- 創(chuàng)建目標文件夾(如果不存在)。
- 移動文件到目標文件夾。
代碼示例:
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]
# 創(chuàng)建目標文件夾(如果不存在)
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() 用于創(chuàng)建多級目錄。
方法三:批量壓縮文件
有時你需要將多個文件打包成一個壓縮文件,以便發(fā)送或存儲。Python 的 zipfile 模塊可以幫助你輕松實現這一功能。
步驟:
- 導入 zipfile 模塊。
- 創(chuàng)建一個新的壓縮文件。
- 將指定目錄下的文件添加到壓縮文件中。
代碼示例:
import os
import zipfile
def zip_files(directory, output_zip="archive.zip"):
"""
將指定目錄下的所有文件壓縮到一個 ZIP 文件中。
:param directory: 目標目錄路徑
:param output_zip: 輸出的 ZIP 文件名,默認為 'archive.zip'
"""
# 創(chuàng)建一個新的 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() 用于創(chuàng)建一個新的 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'
"""
# 創(chuàng)建輸出目錄(如果不存在)
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() 用于解壓所有文件到指定目錄。
實戰(zhàn)案例分析:自動化文件管理腳本
假設你有一個文件夾 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 文件: 創(chuàng)建 PDF_Docs 文件夾,并將所有 PDF 文件移動進去。
- 移動圖片文件: 創(chuàng)建 Images 文件夾,并將所有圖片文件移動進去。
- 壓縮剩余文件: 將剩余文件壓縮成一個 ZIP 文件。
總結
本文介紹了如何利用 Python 進行批量文件管理,包括重命名文件、按類型移動文件、批量壓縮文件以及解壓縮文件等操作。通過具體的代碼示例,展示了這些任務的實現方法。這些技術可以幫助用戶高效地組織和處理大量文件,提高工作效率。