Изменить!
Я пытаюсь создать цикл для открытия файлов 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 = [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, skiprows=27
).drop_duplicates(subset=['prot_acc','prot_score','prot_cover'])
Но затем я получаю сообщение «TypeError: можно объединить только str (не «список») с str».
Я просмотрел страницы здесь в стеке, но пока не смог чтобы найти решение, я надеюсь, что мой вопрос ясен!
Спасибо за всю помощь Я нашел следующее решение своей проблемы, избавившись от словаря и используя фрейм данных из фреймов данных. ! Я добавил это ниже. Поскольку некоторые могут заметить, что оператор if все еще находится в стадии разработки, я пытаюсь создать код, который удаляет пустые фреймы данных, например, мой код доходит до p, а не до z. Мне удалось объединить этот результат с циклом pd.read!
alfabet = list(map(chr, range(ord('a'), ord('z')+1)))
list = alfabet
readout = [[] for x in list]
for i,x in enumerate(list):
try:
readout = [f for f in os.listdir(csv_directory) if f.endswith(').csv') and f.startswith(x) ]
if #empty delete
except:
pass
`
Изменить! Я пытаюсь создать цикл для открытия файлов 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». Я просмотрел страницы здесь в стеке, но пока не смог чтобы найти решение, я надеюсь, что мой вопрос ясен! Спасибо за всю помощь :) Я нашел следующее решение своей проблемы, избавившись от словаря и используя фрейм данных из фреймов данных. ! Я добавил это ниже. Поскольку некоторые могут заметить, что оператор if все еще находится в стадии разработки, я пытаюсь создать код, который удаляет пустые фреймы данных, например, мой код доходит до p, а не до z. Мне удалось объединить этот результат с циклом pd.read! alfabet = list(map(chr, range(ord('a'), ord('z')+1))) list = alfabet readout = [[] for x in list] for i,x in enumerate(list): try: readout[i] = [f for f in os.listdir(csv_directory) if f.endswith(').csv') and f.startswith(x) ] if #empty delete except: pass `