Python Нужно сравнить файл All_20180418.vcf.gz с файлом 1.csv

Нужно сравнить файл All_20180418.vcf.gz с файлом 1.csv и записать строки из All_20180418.vcf.gz в новый csv по которым были совпадения rs с 1.csv

ЭТО All_20180418.vcf.gz введите сюда описание изображения

А это 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


Ответы (0 шт):