如何使python的read_csv以字母数字顺序读取文件

时间:2019-02-18 02:27:34

标签: python pandas

我编写了一个代码,可以读取文件夹中的一系列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)

2 个答案:

答案 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可以忽略