Как прочитать этот файл с помощью Python? - PullRequest
1 голос
/ 15 ноября 2009

У меня есть файл ДНК в следующем формате:

>gi|5524211|gb|AAD44166.1| cytochrome
ACCAGAGCGGCACAGCAGCGACATCAGCACTAGCACTAGCATCAGCATCAGCATCAGC
CTACATCATCACAGCAGCATCAGCATCGACATCAGCATCAGCATCAGCATCGACGACT
ACACCCCCCCCGGTGTGTGTGGGGGGTTAAAAATGATGAGTGATGAGTGAGTTGTGTG
CTACATCATCACAGCAGCATCAGCATCGACATCAGCATCAGCATCAGCATCGACGACT
TTCTATCATCATTCGGCGGGGGGATATATTATAGCGCGCGATTATTGCGCAGTCTACG
TCATCGACTACGATCAGCATCAGCATCAGCATCAGCATCGACTAGCATCAGCTACGAC

Как мне прочитать этот файл и извлечь часть последовательности ДНК (ACCAGAGCGG...) без каких-либо символов новой строки, например:

ACCAGAGCGGCACAGCAGCGACATCAGCACTAGCACTAGCATCAGCATCAGCATCAGCCTACATCATCACAGCAGCATCA

Может быть, регулярное выражение не нужно?

Ответы [ 2 ]

8 голосов
/ 15 ноября 2009

Если всегда есть только одна строка заголовка:

dnalines = text.split('\n')[1:]
dna = ''.join(dnalines)

С текстом = содержимое вашего файла (например, text = open('yourfile').read())

3 голосов
/ 15 ноября 2009

Я провел несколько тестов, и оказалось, что следующее более эффективно, чем ответ Делрота :

text.split('\n', 1)[1].replace('\n', '')

Редактировать: подождите, это не так просто. Я рассчитал оба метода, дважды, используя Python 2.6.4 и 3.1.1, для файла ~ 30 МБ:

  • Python 2.6.4, моя версия:

    $ python -m timeit -c "open('x').read().split('\n', 1)[1].replace('\n', '')"
    10 loops, best of 3: 221 msec per loop
    $ python -m timeit -c "open('x').read().split('\n', 1)[1].replace('\n', '')"
    10 loops, best of 3: 219 msec per loop
    
  • Python 2.6.4, версия delroth:

    $ python -m timeit -c "''.join(open('x').read().split('\n')[1:])"
    10 loops, best of 3: 392 msec per loop
    $ python -m timeit -c "''.join(open('x').read().split('\n')[1:])"
    10 loops, best of 3: 390 msec per loop
    
  • Python 3.1.1, моя версия:

    $ python3 -m timeit -c "open('x').read().split('\n', 1)[1].replace('\n', '')"
    10 loops, best of 3: 803 msec per loop
    $ python3 -m timeit -c "open('x').read().split('\n', 1)[1].replace('\n', '')"
    10 loops, best of 3: 798 msec per loop
    
  • Python 3.1.1, версия delroth:

    $ python3 -m timeit -c "''.join(open('x').read().split('\n')[1:])"
    10 loops, best of 3: 610 msec per loop
    $ python3 -m timeit -c "''.join(open('x').read().split('\n')[1:])"
    10 loops, best of 3: 610 msec per loop
    

Вывод: Python 3 медленнее , и от версии Python зависит, какой из двух фрагментов кода быстрее!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...