如何实现脚本自动切换目录下的下一个文件?如何统计父目录各子目录指定类型文件数?
你的两个脚本问题解决方案
嘿,我来帮你搞定这两个脚本需求:
一、让脚本自动遍历并处理目录中的下一个文件
我猜你是想让脚本逐个处理目录里的文件(处理完一个自动切换到下一个)对吧?用pathlib就能轻松实现,它比os模块更简洁直观。
举个基础的遍历示例,会依次处理目录里的每个文件:
from pathlib import Path # 可以指定要遍历的目录,默认用当前工作目录 target_folder = Path.cwd() # 遍历目录下所有文件(只看当前目录,不深入子目录) for file in target_folder.glob("*"): if file.is_file(): # 跳过子目录,只处理文件 print(f"现在处理文件:{file.name}") # 这里写你的文件处理逻辑,比如读取内容、修改等 # 处理完当前文件后,循环会自动切换到下一个
如果需要按文件名排序后遍历(避免随机顺序),可以先把文件列表排序:
# 先获取所有文件并排序 sorted_files = sorted(target_folder.glob("*")) for file in sorted_files: if file.is_file(): print(f"按顺序处理:{file.name}") # 你的处理代码
二、修改文件统计脚本,支持子目录单独统计
你的现有脚本只能统计当前目录的.txt文件,我们可以把它改成更灵活的版本:既能放在任意目录运行,还能指定统计的文件类型,并且自动统计每个子目录的文件数量。
修改后的完整代码
from pathlib import Path import sys def count_files_by_dir(target_dir: Path, file_ext: str = "txt"): # 遍历目标目录下的所有直接子目录 for subdir in target_dir.iterdir(): if subdir.is_dir(): # 统计子目录里指定后缀的文件 file_num = len(list(subdir.glob(f"*.{file_ext}"))) print(f"子目录「{subdir.name}」中.{file_ext} 文件数量:{file_num}") # 额外统计当前目录的目标文件数量 current_dir_num = len(list(target_dir.glob(f"*.{file_ext}"))) print(f"\n当前目录「{target_dir.name}」中.{file_ext} 文件数量:{current_dir_num}") if __name__ == "__main__": # 支持通过命令行传参数:比如 python your_script.py /path/to/parent_dir md # 没传参数的话,默认当前目录 + txt类型 target_dir = Path(sys.argv[1]) if len(sys.argv) >= 2 else Path.cwd() file_ext = sys.argv[2] if len(sys.argv) >= 3 else "txt" # 先检查目录是否有效 if not target_dir.exists() or not target_dir.is_dir(): print(f"❌ 错误:目录「{target_dir}」不存在或不是有效目录") sys.exit(1) # 执行统计 count_files_by_dir(target_dir, file_ext) input("Press any key to exit")
代码亮点说明
- 灵活指定参数:运行时可以直接传目录和文件类型,比如
python script.py ./my_parent_dir docx,就能统计my_parent_dir下所有子目录的docx文件数量 - 子目录单独统计:自动遍历父目录下的所有直接子目录,分别输出每个子目录的统计结果
- 兼容性强:放在任意目录都能运行,无需修改代码
- 错误检查:如果传的目录不存在,会提示错误并退出,避免崩溃
如果你需要递归统计所有层级的子目录(比如子目录里的子目录也要统计),只需要把subdir.glob(f"*.{file_ext}")改成subdir.rglob(f"*.{file_ext}")就行,rglob会递归遍历所有子目录。
内容的提问来源于stack exchange,提问作者jdinges93
相关产品推荐
相关产品推荐

