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