You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现脚本自动切换目录下的下一个文件?如何统计父目录各子目录指定类型文件数?

你的两个脚本问题解决方案

嘿,我来帮你搞定这两个脚本需求:

一、让脚本自动遍历并处理目录中的下一个文件

我猜你是想让脚本逐个处理目录里的文件(处理完一个自动切换到下一个)对吧?用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 20:22:52