我正在尝试创建一个循环来打开 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” 我已经查看了堆栈上的页面,但尚未找到解决方案,我希望我的问题很清楚!
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+”