如何导入具有排序文件名的csv文件?

2024-04-27 03:47:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图导入多个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',
...
]    

我该怎么解决这个问题?你知道吗


Tags: 文件csv代码排序文件名数字globfile
3条回答
allfiles = glob.glob('*.csv')   
allfiles.sort(key= lambda x: int(x.split('_')[1].split('.')[0]))  

这也是一种方法。此算法将根据文件名字符串的长度进行排序。你知道吗

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']

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

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

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

还要注意的是,我使用了glob.iglob而不是glob.glob,因为不需要制作中间列表,迭代器就可以很好地完成这项工作。你知道吗

相关问题 更多 >