【问题标题】:How to extract specific columns from a space separated file in Python?如何从 Python 中的空格分隔文件中提取特定列?
【发布时间】:2014-09-10 14:35:47
【问题描述】:

我正在尝试处理蛋白质数据库中的一个文件,该文件由空格(不是 \t)分隔。我有一个 .txt 文件,我想提取特定的行,并且我只想从这些行中提取几列。

我需要用 Python 来做。我首先尝试使用命令行并使用 awk 命令没有问题,但我不知道如何在 Python 中执行相同操作。

这是我的文件的摘录:

[...] SEQRES 6 B 80 ALA LEU SER ILE LYS LYS ALA GLN THR PRO GLN GLN TRP SEQRES 7 B 80 赖氨酸专业版 螺旋 1 1 THR A 68 SER A 81 1 14 螺旋 2 2 CYS A 97 LEU A 110 1 14 螺旋 3 3 ASN A 122 SER A 133 1 12 [...]

例如,我想只取“HELIX”行,然后取第 4、第 6、第 7 和第 9 列。我开始使用 for 循环逐行读取文件,然后提取以 'HELIX' 开头的那些行......仅此而已。

编辑:这是我现在的代码,但打印不能正常工作,只打印每个块的第一行(HELIX SHEET AND DBREF)

#!/usr/bin/python
import sys

for line in open(sys.argv[1]):
 if 'HELIX' in line:
   helix = line.split()
 elif 'SHEET'in line:
   sheet = line.split()
 elif 'DBREF' in line:
   dbref = line.split()

print (helix), (sheet), (dbref)

【问题讨论】:

  • 你能发布你目前得到的代码吗?
  • 请发布您的代码。你的具体问题是什么?
  • 我的代码一团糟,这就是我没有发布它的原因......我什至不知道我现在在做什么。我的具体问题是我需要找到那些以“HELIX”开头的行的特定列。对于那些以“SHEET”开头的行,另一个特定的列等等。所以,我在阅读了一些 cmets 后完成了这个:for line in open(sys.argv[1]): if 'HELIX' in line: cols = line. split() print (cols[0], cols[3], cols[5], cols[6], cols[8]) 事情是:我不想对这些行做同样的事情从“SHEET”开始(仅更改我要提取的列的位置)。

标签: python extract pdb


【解决方案1】:

如果您已经提取了该行,则可以使用line.split() 将其拆分。这将为您提供一个列表,您可以从中提取您需要的所有元素:

>>> test='HELIX 2 2 CYS A 97'
>>> test.split()
['HELIX', '2', '2', 'CYS', 'A', '97']
>>> test.split()[3]
'CYS'

【讨论】:

    【解决方案2】:

    查看 CSV 库。 https://docs.python.org/2/library/csv.html 下面的代码应该可以解决问题

    >>> import csv
    >>> with open('my-file.txt', 'rb') as myfile:
    ...     spamreader = csv.reader(myfile, delimiter=' ', )
    ...     for row in spamreader:
    ...         print row[3]
    

    【讨论】:

      【解决方案3】:

      你有什么理由不能只使用 split 吗?

      for line in open('myfile'):
        if line.startswith('HELIX')
          cols = line.split(' ')
          process(cols[3], cols[5], cols[6], cols[8])
      

      【讨论】:

      • 最后一列应该是“97”和“122”,但是最后一列返回“97”和“”,因为 122 是一个三位数字,这会改变“”之间的空格数A" 和最终数字,因此,列数......
      【解决方案4】:

      您可以根据需要扩展关键字。 结果是包含关键字的列表 你可以对结果做进一步的处理来得到你想要的

      with open("your file") as f:
           keyWords = ['HELIX','SHEET','DBREF']
           result = [ line  for line in f for key in keyWords if key in line]
      

      【讨论】:

        猜你喜欢
        • 2012-11-11
        • 2011-12-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-28
        • 2017-10-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多