使用 python 将文件名从目录读入 .csv 文件,同时保持它们的顺序

Reading filenames from directory into a .csv file using python while maintaining the order that they're in

提问人:Lamb Sauce 提问时间:5/9/2023 最后编辑:TimusLamb Sauce 更新时间:5/12/2023 访问量:69

问:

标题说明了一切。正常情况下很容易做到,但它必须保持文件夹中的原始顺序。 我有一些文件(总共 1000 个)我必须放入 .csv 中。 文件名如下所示:File names example

我一直在用头撞墙。

python 镜像 csv 文件 文件-io

评论

0赞 luxcem 5/9/2023
目录中的文件顺序取决于底层文件系统,它不是真正可靠的东西(unix.stackexchange.com/questions/13451/...),您最好指定顺序并直接在 python 中对文件进行排序。
0赞 Mark Ransom 5/9/2023
真的没有“原始秩序”这样的东西。也许您会发现按文件名进行自然排序很有帮助。
0赞 guidot 5/9/2023
@MarkRansom:我不同意,因为有一个“原始顺序”,即在 Linux 下列出文件的顺序。我同意,这没有实际用途,并且发布屏幕截图不太可能引用该命令。ls
0赞 Mark Ransom 5/9/2023
@guidot,如果您从列表中间删除一个文件,然后创建一个新文件,那么新文件会显示在哪里?如果您需要按创建日期/时间排序的列表,最好明确说明。
0赞 tripleee 5/9/2023
@guidot 这是不正确的; 对其输出进行排序。但是,例如 按文件在磁盘上存储的物理顺序输出文件。lsfind

答:

2赞 tripleee 5/9/2023 #1

os.scandir()以操作系统返回文件的顺序返回文件。如果您指的是存储在目录中的顺序,这是最接近“原始订单”的顺序。

import os
import csv

with open('file.csv', 'w') as output:
    writer = csv.writer(output)
    for file in os.scandir():
        writer.writerow([file.name])

将 CSV 文件用于简单的单列文本有点愚蠢,但也许您的用户并不复杂(或者您的文件名真的很复杂,您需要正确处理带有换行符的文件名等)。

您的图片看起来文件只是按字母顺序排列,这就是某些文件浏览器的显示方式。 将按字母顺序生成文件,或者如果要应用某种自定义排序顺序,例如按创建日期(如果您的操作系统提供)或最新修改日期),则仅应用于您从中获取的列表。(返回的对象具有包含此信息的成员。os.listdir()sorted()os.scandir()os.scandir.stat

0赞 Lamb Sauce 5/12/2023 #2

我通过简单地将所有文件重命名为 000、001、002 等来解决这个问题。然后,当我按字母数字对文件进行排序时,它会使一切变得更好。我认为 python 库中的排序函数与 MS Windows 中使用的算法略有不同。 谢谢tripleee!

评论

1赞 Mark Ransom 5/13/2023
Python 使用的排序顺序严格是字母数字,除非您使用参数。Windows 使用类似于我在评论中提到的自然排序的东西。key