使用Python读取目录文件名写入.csv,需保留文件夹原始顺序
按文件夹原始显示顺序导出文件名到CSV
问题关键
常规读取文件列表的方法(比如Python的os.listdir)默认按字符串排序,大概率和你在资源管理器里看到的顺序对不上。要严格保留原始顺序,得用系统原生的排序逻辑,或者针对你的文件名格式做精准排序。
实现方案
方案1:Windows平台完美匹配资源管理器顺序
直接调用Windows Shell接口,完全复用资源管理器的排序规则,不管文件名是什么格式都能精准匹配:
import win32com.client import csv # 替换成你的目标文件夹路径 target_folder = r"C:\Users\XXX\YourFolder" # 通过Shell获取按系统顺序排列的文件项 shell = win32com.client.Dispatch("Shell.Application") folder = shell.NameSpace(target_folder) file_items = folder.Items() # 提取所有文件名(跳过子文件夹) file_names = [item.Name for item in file_items if not item.IsFolder] # 写入CSV,utf-8编码避免中文乱码 with open("file_list.csv", "w", encoding="utf-8", newline="") as csv_file: writer = csv.writer(csv_file) writer.writerow(["文件名"]) # 写入表头 for name in file_names: writer.writerow([name])
注:需要先安装pywin32库,执行pip install pywin32即可
方案2:跨平台通用(针对你的文件名格式)
从你的文件名示例来看,应该是带固定位数数字前缀的格式(比如0001_xxx),这种情况可以直接提取数字前缀排序,跨Windows/Linux/macOS都能用:
import os import csv target_folder = r"C:\Users\XXX\YourFolder" # 筛选出文件夹内的所有文件(排除子文件夹) all_files = [f for f in os.listdir(target_folder) if os.path.isfile(os.path.join(target_folder, f))] # 按文件名的数字前缀排序,根据你的实际格式调整分割规则 all_files.sort(key=lambda filename: int(filename.split("_")[0])) # 写入CSV with open("file_list.csv", "w", encoding="utf-8", newline="") as csv_file: writer = csv.writer(csv_file) writer.writerow(["文件名"]) for name in all_files: writer.writerow([name])
额外提示
- 处理1000个文件完全没压力,两种方案都能秒级完成
- 如果是Linux/macOS系统,方案2直接能用;要是想匹配系统文件管理器的顺序,也可以用命令行快速导出:
printf "文件名\n" > file_list.csv && ls -v | grep -v "^d$" | sed 's/^/"/;s/$/"/' >> file_list.csv
内容的提问来源于stack exchange,提问作者The Oracle
相关产品推荐
相关产品推荐

