У меня есть файл csv с одним столбцом, но 6,2 миллиона строк, все содержащие строки от 6 до 20 символов. Некоторые строки будут найдены в двух экземплярах (или более), и я хочу записать их в новый файл csv - предполагается, что должно быть около 1 миллиона неистовых строк. Вот и все. Однако постоянный поиск через словарь из 6 миллионов записей занимает свое время, и я буду благодарен за любые советы о том, как это сделать. Любой сценарий, который я написал до сих пор, занимает по меньшей мере неделю (!) Для запуска, согласно некоторым таймингам, которые я сделал.Оптимизация поиска в очень больших файлах csv
Первая попытка:
in_file_1 = open('UniProt Trypsinome (full).csv','r')
in_list_1 = list(csv.reader(in_file_1))
out_file_1 = open('UniProt Non-Unique Reference Trypsinome.csv','w+')
out_file_2 = open('UniProt Unique Trypsin Peptides.csv','w+')
writer_1 = csv.writer(out_file_1)
writer_2 = csv.writer(out_file_2)
# Create trypsinome dictionary construct
ref_dict = {}
for row in range(len(in_list_1)):
ref_dict[row] = in_list_1[row]
# Find unique/non-unique peptides from trypsinome
Peptide_list = []
Uniques = []
for n in range(len(in_list_1)):
Peptide = ref_dict.pop(n)
if Peptide in ref_dict.values(): # Non-unique peptides
Peptide_list.append(Peptide)
else:
Uniques.append(Peptide) # Unique peptides
for m in range(len(Peptide_list)):
Write_list = (str(Peptide_list[m]).replace("'","").replace("[",'').replace("]",''),'')
writer_1.writerow(Write_list)
Вторая попытка:
in_file_1 = open('UniProt Trypsinome (full).csv','r')
in_list_1 = list(csv.reader(in_file_1))
out_file_1 = open('UniProt Non-Unique Reference Trypsinome.csv','w+')
writer_1 = csv.writer(out_file_1)
ref_dict = {}
for row in range(len(in_list_1)):
Peptide = in_list_1[row]
if Peptide in ref_dict.values():
write = (in_list_1[row],'')
writer_1.writerow(write)
else:
ref_dict[row] = in_list_1[row]
EDIT: Вот несколько строк из файла CSV:
SELVQK
AKLAEQAER
AKLAEQAERR
LAEQAER
LAEQAERYDDMAAAMK
LAEQAERYDDMAAAMKK
MTMDKSELVQK
YDDMAAAMKAVTEQGHELSNEER
YDDMAAAMKAVTEQGHELSNEERR
Пожалуйста размещаете несколько типичных линий вашего CSV-файл. – unutbu
Проблема в том, что вы читаете весь файл сразу, что ни для кого не подходит. Если вам просто нужно вывести дублированные строки, 'uniq -Di somefile.txt> duplicate_lines.txt' –
Странные значения, разделенные запятыми (csv), где нет ничего, чтобы разделить, хе-хе! Я бы не рассматривал этот файл csv. –