17 個實用 Python 文件與目錄管理的技巧
Python作為一門強大而易學的語言,其在文件與目錄管理方面的應用廣泛且高效。無論是日常的數據處理、自動化腳本編寫還是軟件開發中,熟練掌握文件操作都是必不可少的技能。下面,我們將通過一系列簡單到復雜的技巧,一步步探索如何高效地管理你的文件和目錄。
1. 列出目錄中的文件
技巧說明: 使用os模塊來獲取目錄下的所有文件名。
import os
def list_files(directory):
"""列出指定目錄下的所有文件"""
files = os.listdir(directory)
print("文件列表:", files)
list_files("./example_directory") # 假設example_directory是你的目標目錄
2. 檢查文件是否存在
技巧說明: 使用os.path.exists()來避免錯誤地操作不存在的文件。
file_path = "./example.txt"
if os.path.exists(file_path):
print("文件存在")
else:
print("文件不存在")
3. 讀取文件內容
技巧說明: 使用open()函數以讀取模式('r')打開文件,然后用.read()方法讀取內容。
with open('example.txt', 'r') as file:
content = file.read()
print("文件內容:", content)
4. 寫入文件
技巧說明: 使用open()函數以寫入模式('w')打開文件,.write()方法用于寫入數據。
with open('new_file.txt', 'w') as file:
file.write("Hello, Python!")
5. 追加內容到文件
技巧說明: 使用追加模式('a')可以在文件末尾添加內容。
with open('new_file.txt', 'a') as file:
file.write("\nAdding more content.")
6. 重命名文件
技巧說明: os.rename()用于更改文件名。
old_name = 'old_file.txt'
new_name = 'renamed_file.txt'
os.rename(old_name, new_name)
7. 刪除文件
技巧說明: 小心使用os.remove(),刪除后的文件無法恢復。
os.remove('to_delete.txt')
8. 創建目錄
技巧說明: 使用os.mkdir()創建單級目錄,os.makedirs()創建多級目錄。
os.mkdir('new_directory')
os.makedirs('nested/directory/path')
9. 刪除目錄
技巧說明: 刪除空目錄用os.rmdir(),刪除非空目錄用shutil.rmtree()。
os.rmdir('empty_directory')
import shutil
shutil.rmtree('directory_to_remove', ignore_errors=True) # 注意:此操作不可逆
10. 遍歷目錄樹
技巧說明: 使用os.walk()遍歷目錄及其子目錄。
for root, dirs, files in os.walk('.'):
print(f"當前路徑: {root}")
print("子目錄:", dirs)
print("文件:", files)
print("--------------------")
11. 復制文件
技巧說明: 使用shutil.copy()或shutil.copy2()來復制文件。
shutil.copy('source.txt', 'destination.txt')
12. 移動或重命名文件和目錄
技巧說明: 使用shutil.move()可以移動文件或目錄,同時它也支持重命名。
shutil.move('old_location.txt', 'new_location.txt')
高級和優化技巧
13. 文件讀寫性能優化 - 批量處理
技巧說明: 當處理大量數據時,一次性讀取整個文件可能會消耗大量內存。可以分批處理數據,特別是處理大文件時。
batch_size = 1000
lines = []
with open('large_file.txt', 'r') as file:
for i, line in enumerate(file):
lines.append(line)
if (i + 1) % batch_size == 0 or i + 1 == os.path.getsize('large_file.txt'):
process_batch(lines) # 假設這是處理一批數據的函數
lines = []
14. 文件內容過濾與搜索
技巧說明: 在讀取文件時,可以即時過濾出需要的內容,提高效率。
search_term = "Python"
with open('content.txt', 'r') as file:
for line in file:
if search_term in line:
print(line.strip())
15. 使用上下文管理器自定義文件操作
技巧說明: 定義一個上下文管理器,可以更好地控制資源,比如自動關閉文件。
from contextlib import contextmanager
@contextmanager
def managed_file(name):
try:
f = open(name, 'r')
yield f
finally:
f.close()
with managed_file('data.txt') as file:
for line in file:
print(line)
16. 文件壓縮與解壓
技巧說明: 使用zipfile和tarfile模塊處理壓縮文件。
import zipfile
# 壓縮文件
with zipfile.ZipFile('archive.zip', 'w') as zipf:
zipf.write('file_to_compress.txt')
# 解壓文件
with zipfile.ZipFile('archive.zip', 'r') as zipf:
zipf.extractall('unzipped_files')
17. 大文件分割與合并
技巧說明: 對于非常大的文件,可能需要分割成小塊處理,之后再合并。
# 分割文件示例(簡化)
def split_file(file_name, chunk_size=1024*1024):
with open(file_name, 'rb') as f:
i = 0
while True:
chunk = f.read(chunk_size)
if not chunk:
break
with open(f'split_{i}.part', 'wb') as chunk_file:
chunk_file.write(chunk)
i += 1
# 合并文件示例
def merge_files(output_name, part_prefix='split_', part_extension='.part'):
with open(output_name, 'wb') as out_file:
for i in range(1, 100): # 假設最多有100個部分
part_file_name = f'{part_prefix}{i}{part_extension}'
if os.path.exists(part_file_name):
with open(part_file_name, 'rb') as chunk_file:
out_file.write(chunk_file.read())
else:
break
# 調用示例
# split_file('largefile.txt')
# merge_files('mergedfile.txt')