我编写了一个代码,可以读取文件夹中的一系列CSV文件。它会读取我选择的文件夹中的所有CSV文件。 CSV文件的格式如下:
A1.CSV,A2.CSV,A3.CSV,....,A10.CSV,A11.CSV,..... A24.CSV,B1.CSV,B2.CSV,... >
等等。
代码读取文件,然后将它们逐列追加。但是,当读取文件时,顺序为:A1> A10> A11> ...> A19> A2> A20> A21 ...
有没有一种方法可以让python以字母数字顺序读取文件,例如: A1> A2> A3> ...> A10> A11> ...
我可以手动将零添加到单个数字(例如A01),这很繁琐,因为我有很多文件都在字母后面加上一个单个数字。
for files in os.listdir(full_path):
if os.path.isfile(os.path.join(full_path, files)):
df = pd.read_excel(files, 'Sheet1')[pkitems]
df[''] = np.nan
dfs.append(df)
data = pd.concat(dfs, axis=1)
答案 0 :(得分:1)
通过两个键使用内置的list.sort
:
file_list = [file for file in os.listdir(full_path) if file.endswith('.csv')]
file_list.sort(key=lambda x:(os.path.splitext(x)[0][0], int(os.path.splitext(x)[0][1:])))
print(file_list)
['A1.csv',
'A2.csv',
...
'A23.csv',
'A24.csv',
'B1.csv',
'B2.csv',
...
'B23.csv',
'B24.csv']
编辑:为了只读取以'.csv'结尾的文件
答案 1 :(得分:0)
如果您将os.listdir
所生成的文件列表去除了'A'并将其转换为整数,则可以通过按索引号的顺序对for files in os.listdir(full_path).sort(key=lambda f: int(f[1:])):
...
生成的文件进行排序:
&nums[50]
这假定您的所有文件名均以单个字符开头,对于indes可以忽略