如何在读取之前对目录中的文件进行排序?

10 投票
4 回答
41907 浏览
提问于 2025-04-16 21:49

我正在做一个程序,它会根据从一个文件夹中读取文件的顺序,把结果写入一个csv文件。不过,当文件数量很多,文件名的结尾是1、2、3、4、5、6、7、8、9、10、11、12时,我的程序实际上是按照字母顺序来读取文件的:1、10、11、12……2、20、21……99。这样就出现了问题,因为另一个程序认为这些文件是按数字顺序排列的,这样会导致图表结果不准确。

实际上,文件名看起来是这样的:String.ext.ext2.1.txt, String.ext.ext2.2.txt,依此类推……

我该如何用Python脚本来解决这个问题呢?

4 个回答

5
  1. 使用 os.listdir 来获取文件名的列表。
  2. 自然排序 来对这个列表进行排序。
  3. 按照你排序后的列表顺序处理这些文件。
5

在你的程序里对文件列表进行排序。不要依赖操作系统的调用来获取文件的正确顺序,因为这取决于实际使用的文件系统。

17

在编程中,有时候我们会遇到一些问题,尤其是在使用某些工具或库的时候。这些问题可能会让我们感到困惑,特别是当我们不太了解这些工具的工作原理时。

比如说,某个功能可能在某种情况下正常工作,但在其他情况下却出现错误。这时候,我们需要仔细检查代码,看看是不是有什么地方没有考虑到,或者有没有遗漏的步骤。

有时候,解决问题的关键在于仔细阅读错误信息。错误信息就像是程序在告诉我们哪里出了问题,虽然它们可能看起来很复杂,但其实里面往往包含了我们需要的线索。

总之,遇到问题时,不要急于放弃。多尝试几种方法,仔细分析,通常都能找到解决的办法。

files = ['String.ext.ext2.1.txt', 'String.ext.ext2.12.txt', 'String.ext.ext2.2.txt']
# files: coming from os.listdir() sorted alphabetically, thus not numerically

sorted_files = sorted(files, key=lambda x: int(x.split('.')[3]))
# returns: ['String.ext.ext2.1.txt', 'String.ext.ext2.2.txt', 'String.ext.ext2.12.txt']

撰写回答