使用循环 python 分段打开 csv 文件

问题描述 投票:0回答:1

我正在尝试创建一个循环来打开 csv 文件。 我首先创建了多个我想在单独的数据框中打开的文件列表:

file_list_a = [f for f in os.listdir(csv_directory) if f.endswith(').csv') and f.startswith('a') ]

我有多个这样的列表,直到已知数据量为止。

这是我循环的一部分:

for file in file_list:
    if file.startswith('1',1):
            frame_a1[file] = pd.read_csv(csv_directory + file, skiprows=27).drop_duplicates(subset=['prot_acc','prot_score','prot_cover'])
            combine_a1 = pd.concat(frame_a1, axis=0, ignore_index=True)

但是,我也希望第一步自动化,因为有时不知道字母表的哪个字母需要去(startswith('i'))

我尝试过这样的事情:

alfabet = list(map(chr, range(ord('a'), ord('z')+1))) file_list = {} #当使用这些或{}时 对于字母表中的 i: 尝试: file_list[i] = [f for f in os.listdir(csv_directory) if f.endswith(').csv') and f.startswith(i)] 除了: 经过 file_list['a'] #=fil_list_a

这在运行最后一行 file_list['a'] 时创建了我的文件的字典,看起来与我在手动版本中的完全一样:

['a1 (2).csv', 'a1 (3).csv', 'a1 (4).csv', 'a2 (2).csv', 'a2 (3).csv', 'a2 ( 4).csv'、'a3 (2).csv'、'a3 (3).csv'、'a3 (4).csv'、'a4 (2).csv'、'a4 (3).csv' 、“a4(4).csv”、“a5(2).csv”、“a5(3).csv”、“a5(4).csv”、“a6(2).csv”、“a6(3) ).csv'、'a6 (4).csv'、'a7 (2).csv'、'a7 (3).csv'、'a7 (4).csv']

但是,我似乎无法在下一个代码块中使用它来打开文件。 我尝试过这个例子:

读数 = {} 对于 file_list 中的 i: readout[file_list] = pd.read_csv(csv_directory + file_list[i],skiprows=27).drop_duplicates(subset=['prot_acc','prot_score','prot_cover'])

但是后来我得到“TypeError:只能将 str (不是“列表”)连接到 str” 我已经查看了堆栈上的页面,但尚未找到解决方案,我希望我的问题很清楚!

python loops csv
1个回答
0
投票
readout = {}
for i in file_list:
    readout[file_list] = pd.read_csv(
        csv_directory + file_list[i], skiprows=27
    ).drop_duplicates(subset=['prot_acc','prot_score','prot_cover'])

for i in file_list
会给你字典的键(a,b,c...)

file_list[i]
为您提供 CSV 列表
['a1 (2).csv', 'a1 (3).csv', 'a1 (4).csv',...]

您还缺少 1 个循环来获取实际文件名,因为现在

csv_directory + file_list[i]
正如错误所述,是“str”+“list”而不是“str”+“str+

© www.soinside.com 2019 - 2024. All rights reserved.