Python Нужно сравнить файл All_20180418.vcf.gz с файлом 1.csv
Нужно сравнить файл All_20180418.vcf.gz с файлом 1.csv и записать строки из All_20180418.vcf.gz в новый csv по которым были совпадения rs с 1.csv
А это 1.csv
Вот код:
import csv
import gzip
csv_file_path = 'C:/Users/1/1.csv'
vcf_file_path = 'C:/Users/1/All_20180418.vcf.gz'
output_file_path = 'C:/Users/1/output11.csv'
# Чтение ID из файла 1.csv
ids_from_csv = set()
with open(csv_file_path, newline='', encoding='utf-8') as csvfile:
reader = csv.reader(csvfile)
for row in reader:
ids_from_csv.add(row[0]) # Предполагаем, что ID находятся в первом столбце
# Открытие файла .vcf.gz и поиск совпадений начиная с 58-й строки
start_line = 58 # Строка, с которой нужно начинать поиск
current_line = 0 # Счётчик строк
with gzip.open(vcf_file_path, 'rt') as vcf_file, open(output_file_path, 'w', newline='',
encoding='utf-8') as output_file:
for line in vcf_file:
current_line += 1
# Пропускаем строки до 58-й
if current_line < start_line:
continue
# Пропускаем строки с заголовком (они начинаются с #)
if line.startswith('#'):
continue
# Разделяем строку на колонки, разделитель - табуляция (VCF стандарт)
columns = line.strip().split('\t')
# Проверка на наличие достаточного количества колонок
if len(columns) < 3:
continue # Пропускаем строку, если она не содержит хотя бы 3 колонки
# Структура VCF файла (поле ID находится в 3-й колонке)
rs_id = columns[2] # Идентификатор (например, rsID)
# Проверяем, есть ли ID из VCF файла в списке ID из CSV
if rs_id in ids_from_csv:
# Если найдено совпадение, записываем всю строку VCF в выходной файл
output_file.write(line)
print(f"Совпадающие записи сохранены в файл {output_file_path}")
Но получаю ошибку IndexError: list index out of range