【问题标题】:How to import csv files with sorted file names?如何导入具有排序文件名的 csv 文件?
【发布时间】:2019-12-05 15:14:44
【问题描述】:

我正在尝试导入多个 csv 文件,当我运行以下代码时,它确实有效。

allfiles = glob.glob('*.csv')
allfiles

但是,这会导致:

['file_0.csv',  
'file_1.csv',  
'file_10.csv',  
'file_100.csv',  
'file_101.csv,  
...
]

如您所见,导入的文件不是排序的数字。我想要的是让我的文件名中的数字按升序排列:

['file_0.csv',  
'file_1.csv',  
'file_2.csv',  
'file_3.csv',
...
]    

我该如何解决这个问题?

【问题讨论】:

    标签: python csv sorting merge


    【解决方案1】:

    os.listdir() 将给出该文件夹中的文件列表,sorted 将对其进行排序

    import os
    sortedlist = sorted(os.listdir())
    

    编辑:只需指定key = len 来计算元素的长度

     sorted(os.listdir(),key = len)
    

    【讨论】:

    • 没注意到你要在file_1,file_2,file_101而不是file_1,file_101,file_2,已经编辑了代码看看
    【解决方案2】:

    这也是一种方法。该算法将按照文件名字符串的长度进行排序。

    import glob
    
    
    all_files = glob.glob('*.csv')
    
    def sort_with_length(file_name):
        return len(file_name)
    
    new_files = sorted(all_files, key = sort_with_length )
    
    print("Old files:")
    print(all_files)
    print("New files:")
    print(new_files)
    

    样本输出:

    Old files:
    ['file1.csv', 'file101.csv', 'file102.csv', 'file2.csv', 'file201.csv', 'file3.csv']
    New files:
    ['file1.csv', 'file2.csv', 'file3.csv', 'file101.csv', 'file102.csv', 'file201.csv']
    

    【讨论】:

      【解决方案3】:

      检查natsort

      from natsort import natsorted
      allfiles=natsorted(allfiles)
      

      【讨论】:

        【解决方案4】:

        glob 无法做到这一点,您需要自己按每个文件包含的整数对结果文件进行排序:

        allfiles = glob.iglob('*.csv')
        
        allfiles_sorted = sorted(allfiles, key=lambda x: int(re.search(r'\d+', x).group()))
        

        另外请注意,我使用了glob.iglob 而不是glob.glob,因为不需要创建一个迭代器可以正常工作的中间列表。

        【讨论】:

          【解决方案5】:
          allfiles = glob.glob('*.csv')   
          allfiles.sort(key= lambda x: int(x.split('_')[1].split('.')[0]))  
          

          【讨论】:

            猜你喜欢
            • 2010-09-20
            • 1970-01-01
            • 1970-01-01
            • 2012-11-04
            • 2021-03-08
            • 1970-01-01
            • 2020-02-12
            • 2021-12-26
            • 1970-01-01
            相关资源
            最近更新 更多