Вы можете сэкономить время, которое занимает 2-й раз, чтобы пропустить заголовки, при условии, что у вас есть достаточное количество свободного дискового пространства: наряду с окончательным файлом также откройте (для 'w +') временный файл temp_file
и сделайте:
import shutil
hdr_list = []
bod_list = []
dispatch = {True: (hdr_list, final_file),
False: (bod_list, temp_file)}
for bowtie_file in file_count:
with open(os.path.join(work_directory_master,bowtie_file)) as f:
for line in f:
L, fou = dispatch[line[0]=='@']
L.append(f)
if len(L) == 1000000:
fou.writelines(L)
del L[:]
# write final parts, if any
for L, fou in dispatch.items():
if L: fou.writelines(L)
temp_file.seek(0)
shutil.copyfileobj(temp_file, final_file)
Это должно повысить производительность вашей программы. Точная настройка, которая теперь жестко запрограммирована 1000000
, или даже полное избавление от списков и запись каждой строки непосредственно в соответствующий файл (окончательный или временный), являются другими вариантами, которые вы должны сравнить (но если у вас есть неограниченное количество память, тогда я ожидаю, что они не будут иметь большого значения - однако, интуиция о производительности часто вводит в заблуждение, поэтому лучше попытаться измерить! -).