【问题标题】:How to read this file using Python?如何使用 Python 读取此文件?
【发布时间】:2009-11-15 19:32:44
【问题描述】:

我有一个格式如下的 DNA 文件:

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

如何读取此文件并提取 DNA 序列部分 (ACCAGAGCGG...) 而不使用任何换行符,例如:

ACCAGAGCGGCACAGCAGCGACATCAGCACTAGCACTAGCATCAGCATCAGCATCAGCCTACATCATCACAGCAGCATCA

也许不需要正则表达式?

【问题讨论】:

  • 您在这个 DNA 项目中提出了很多关于 Python 的问题。
  • @jed - 但至少答案被标记为已接受(并希望被投票)。
  • 我是 python 的菜鸟,这就是为什么。
  • 虽然我喜欢 python,如果你想要这种类型的计算速度,你应该使用 ncbi.nlm.nih.gov/staff/tao/URLAPI/blastall/…>,虽然它可能是一个小节目,但它肯定会比重新发明轮子。这是一个看起来不错的 bips.u-strasbg.fr/fr/Tutorials/Comparison/Blast/…>。

标签: python regex


【解决方案1】:

如果总是只有一行标题:

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

文本 = 文件的内容(例如,text = open('yourfile').read()

【讨论】:

    【解决方案2】:

    我做了一些测试,看来下面比delroth's answer效率更高:

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

    编辑:等等,没那么简单。我使用 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要慢很多,这取决于两个代码 sn-ps 哪个更快的 Python 版本!

    【讨论】:

      猜你喜欢
      • 2020-07-17
      • 2017-08-17
      • 2010-12-08
      • 1970-01-01
      • 1970-01-01
      • 2013-10-23
      • 2018-06-30
      • 2017-10-03
      相关资源
      最近更新 更多