2009-11-15 4 views
1

У меня есть файл ДНК в следующем формате:Как прочитать этот файл с помощью Python?

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

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

ACCAGAGCGGCACAGCAGCGACATCAGCACTAGCACTAGCATCAGCATCAGCATCAGCCTACATCATCACAGCAGCATCA 

Возможно регулярное выражение не нужен?

+0

Вы задаете много вопросов о Python в этом проекте ДНК. –

+0

@jed - но, по крайней мере, ответы отмечены как принятые (и, надеюсь, упреждаемые). – Kev

+0

Я как-то вроде noob на python. – y2k

ответ

8

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

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

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

+0

Огромное спасибо, что это отлично – y2k

3

Я сделал несколько тестов, и кажется, что следующее более эффективным, чем delroth's answer:

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

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

  • 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, какой из двух фрагментов кода является быстрее!

+0

+1 для использования timeit! -) –

Смежные вопросы