使用循环分段打开 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 = {} #when use these or {}
for i in alfabet:
    try:
        file_list[i] = [f for f in os.listdir(csv_directory) if f.endswith(').csv') and f.startswith(i)]
    except:
        pass
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']

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

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

但是后来我得到“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.