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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 10:47:29