【Python】文件操作用pathlib比os更簡(jiǎn)潔
2023-08-31 05:21 作者:PiKaChu345 | 我要投稿

本視頻闡述的主要內(nèi)容是,當(dāng)我們使用python操作文件的時(shí)候,使用pathlib模塊比使用os模塊更簡(jiǎn)潔。
視頻用五種不同情景下的代碼做了一個(gè)對(duì)比。
文中出現(xiàn)的所有代碼:
- 刪除目錄下所有文件(包含子文件):
from pathlib import Path def delete_all_contents_in_directory(src_dir): # First, delete all files and symlinks for entry in Path(src_dir).rglob('*'): if entry.is_file() or entry.is_symlink(): entry.unlink() # Then, delete all directories for entry in Path(src_dir).rglob('*'): if entry.is_dir(): try: entry.rmdir() except OSError: pass if __name__ == "__main__": source_directory = 'my_dir' delete_all_contents_in_directory(source_directory)
- 刪除一個(gè)目錄當(dāng)中所有文件(不包含子目錄)
from pathlib import Path def delete_top_level_contents(src_dir): for entry in Path(src_dir).iterdir(): if entry.is_file() or entry.is_symlink(): entry.unlink() if __name__ == "__main__": source_directory = 'my_dir' delete_top_level_contents(source_directory)
os的版本
import os def delete_top_level_contents(src_dir): for entry_name in os.listdir(src_dir): entry_path = os.path.join(src_dir, entry_name) if os.path.isfile(entry_path) or os.path.islink(entry_path): os.remove(entry_path) if __name__ == "__main__": source_directory = 'my_dir' delete_top_level_contents(source_directory)
- 刪除目錄下指定格式的文件(不包含子目錄)
os的版本
import os def delete_specific_formats_with_os(src_dir, extensions): for entry_name in os.listdir(src_dir): entry_path = os.path.join(src_dir, entry_name) if os.path.isfile(entry_path) and os.path.splitext(entry_name)[1] in extensions: os.remove(entry_path) if __name__ == "__main__": source_directory = 'my_dir' formats_to_delete = ['.txt', '.log'] delete_specific_formats_with_os(source_directory, formats_to_delete)
pathlib的版本
from pathlib import Path def delete_specific_formats_with_pathlib(src_dir, extensions): for entry in Path(src_dir).iterdir(): if entry.is_file() and entry.suffix in extensions: entry.unlink() if __name__ == "__main__": source_directory = 'my_dir' formats_to_delete = ['.txt', '.log'] delete_specific_formats_with_pathlib(source_directory, formats_to_delete)
- 刪除給定目錄下文件名當(dāng)中包含特定關(guān)鍵詞以及特定擴(kuò)展名的文件(不包含子文件)
import os def delete_files_with_keywords_with_os(src_dir, extensions, keywords): for entry_name in os.listdir(src_dir): entry_path = os.path.join(src_dir, entry_name) if os.path.isfile(entry_path) and os.path.splitext(entry_name)[1] in extensions: if any(keyword in entry_name for keyword in keywords): os.remove(entry_path) if __name__ == "__main__": source_directory = 'my_dir' formats_to_delete = ['.txt', '.log'] keywords_to_search = ['report', 'draft'] delete_files_with_keywords_with_os(source_directory, formats_to_delete, keywords_to_search)
pathlib版本
from pathlib import Path def delete_files_with_keywords_with_pathlib(src_dir, extensions, keywords): for entry in Path(src_dir).iterdir(): if entry.is_file() and entry.suffix in extensions: if any(keyword in entry.name for keyword in keywords): entry.unlink() if __name__ == "__main__": source_directory = 'my_dir' formats_to_delete = ['.txt', '.log'] keywords_to_search = ['report', 'draft'] delete_files_with_keywords_with_pathlib(source_directory, formats_to_delete, keywords_to_search)
- 刪除一個(gè)目錄中名字符合某種pattern的文件(不包含子目錄)
import os import re def delete_files_with_pattern_with_os(src_dir, pattern): for entry_name in os.listdir(src_dir): entry_path = os.path.join(src_dir, entry_name) if os.path.isfile(entry_path) and re.match(pattern, entry_name): os.remove(entry_path) if __name__ == "__main__": source_directory = 'my_dir' pattern_to_search = r'^report_[0-9]{4}\.txt$' delete_files_with_pattern_with_os(source_directory, pattern_to_search)
pathlib的實(shí)現(xiàn)
from pathlib import Path import re def delete_files_with_pattern_with_pathlib(src_dir, pattern): for entry in Path(src_dir).iterdir(): if entry.is_file() and re.match(pattern, entry.name): entry.unlink() if __name__ == "__main__": source_directory = 'my_dir' pattern_to_search = r'^report_[0-9]{4}\.txt$' delete_files_with_pattern_with_pathlib(source_directory, pattern_to_search)
標(biāo)簽: