【问题标题】:How to sort files in a directory before reading?如何在阅读前对目录中的文件进行排序?
【发布时间】:2011-07-19 07:05:47
【问题描述】:

我正在使用一个程序,该程序根据从目录中读取文件的顺序将输出写入 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 脚本做到这一点?

【问题讨论】:

    标签: python sorting file-io


    【解决方案1】:
    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']
    

    【讨论】:

    • sorted_files = sorted(files, key=lambda x: int(x.split('.')[3])) sorted 函数使用第二个参数给出的选择器对其第一个参数进行排序。考虑按特定列对表进行排序。现在,对于第二个论点。这是一个将您的文件名转换为部分列表(由. 分隔)并获取该列表中的第三个元素的函数
    • 让它与这个一起工作: sorted_files = sorted(file_list, key=lambda x: int(x.split('.')[3]) if (x.endswith("txt") ) 否则 x)
    【解决方案2】:

    对程序中的文件列表进行排序。不要依赖操作系统调用来以正确的顺序提供文件,这取决于正在使用的实际文件系统。

    【讨论】:

      【解决方案3】:
      1. 使用os.listdir 获取文件名列表。
      2. 使用natural sort order对列表进行排序。
      3. 按照排序列表的顺序处理文件。

      【讨论】:

        【解决方案4】:

        你可以这样使用:

        fileNames = ['String.ext.ext2.2.txt', 'String.ext.ext2.20.txt', 'String.ext.ext2.1.txt', 'String.ext.ext2.10.txt', 'String.ext.ext2.11.txt', 'String.ext.ext2.0.txt',]
        fileNames = sorted(fileNames, key=lambda y: int(y.rsplit('.', 2)[1]))
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-07-30
          • 1970-01-01
          • 2015-04-15
          • 2018-11-10
          • 2011-08-01
          • 1970-01-01
          相关资源
          最近更新 更多