Извлечение выходных столбцов BLAST в форме CSV с помощью python

У меня есть файл csv в excel, который содержит результат поиска BLAST в следующем формате:

# BLASTN 2.2.29+ # Query: Cryptocephalus androgyne # Database: SANdouble # Fields: query id subject id % identity alignment length mismatches gap opens q. start q. end s. start s. end evalue bit score # 1 hits found Cryptocephalus ctg7180000094003 79.59 637 110 9 38 655 1300 1935 1.00E-125 444 # BLASTN 2.2.29+ # Query: Cryptocephalus aureolus # Database: SANdouble # Fields: query id subject id % identity alignment length mismatches gap opens q. start q. end s. start s. end evalue bit score # 4 hits found Cryptocephalus ctg7180000093816 95.5 667 12 8 7 655 1269 1935 0 1051 Cryptocephalus ctg7180000094021 88.01 667 62 8 7 655 1269 1935 0 780 Cryptocephalus ctg7180000094015 81.26 667 105 13 7 654 1269 1934 2.00E-152 532 Cryptocephalus ctg7180000093818 78.64 515 106 4 8 519 1270 1783 2.00E-94 340 

Я импортировал это как csv в python, используя

 with open('BLASToutput.csv', 'rU') as csvfile: contents = csv.reader(csvfile, delimiter=' ', quotechar='|') for row in contents: table = ', '.join(row) 

То, что я теперь хочу сделать, это извлечь столбцы данных в виде списка. Моя общая цель – подсчитать все совпадения, имеющие более 98% идентичности (третья колонка).

Проблема в том, что, поскольку это не в типичном формате csv, заголовки сверху отсутствуют, поэтому я не могу извлечь столбец на основе его заголовка. Я думал, что если я смогу извлечь третий столбец в качестве списка, я могу использовать обычные инструменты списка в python для извлечения только чисел, которые я хочу, но я никогда не использовал модуль csv pythons, и я изо всех сил пытаюсь найти соответствующую команду. Другие вопросы о SO аналогичны, но не относятся к моему конкретному случаю, когда нет заголовков и пустых ячеек. Если бы вы могли мне помочь, я был бы очень благодарен!

Файл данных не похож на формат CSV. У этого есть комментарии, и его разделитель не является отдельным символом, а форматирует пробелы.

Поскольку ваша общая цель

для подсчета всех совпадений, имеющих более 98% идентичности (третий столбец).

и содержимое файла данных хорошо сформировано, вы можете использовать обычный подход к анализу файлов:

 import re with open('BLASToutput.csv') as f: # read the file line by line for line in f: # skip comments (or maybe leave as it is) if line.startswith('#'): # print line continue # split fields fields = re.split(r' +', line) # check if the 3rd field is greater than 98% if float(fields[2]) > 98: # output the matched line print line 

Мне удалось найти один способ, основанный на:

Python: сплит-файлы с использованием разделителей с несколькими разделителями

 import csv csvfile = open("SANDoubleSuperMatrix.csv", "rU") dialect = csv.Sniffer().sniff(csvfile.read(1024)) csvfile.seek(0) reader = csv.reader(csvfile, dialect) identity = [] for line in reader: identity.append(line[2]) print identity 
  • Сумма столбца CSV в Java
  • Выделите результат спаривания в таблице в csv
  • Вставка файла в Microsoft Excel 2003
  • Как преобразовать 0 в 00 в R?
  • Преобразовать пару xlsx в csv
  • Почему многострочные ячейки в моем файле CSV появляются с вопросительным знаком в конце каждой строки в Excel?
  • Как выполнить поиск файла xlsx для определенной строки с использованием Python (и, возможно, openpyxl)
  • Чтение в датах от Excel в R
  • Импорт таблицы Excel в phpMyAdmin
  • Открытие CSV-файла в Excel и Notepad
  • Как найти номер строки для определенного элемента в файле CSV в Python?
  • Давайте будем гением компьютера.