如何从Python中的空格分隔文件中提取特定列?

时间:2014-09-10 14:35:48

标签: python extract pdb

我正在尝试处理蛋白质数据库中的文件,该文件由空格(不是\ 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  LYS PRO                                                      
HELIX    1   1 THR A   68  SER A   81  1                                  14    
HELIX    2   2 CYS A   97  LEU A  110  1                                  14    
HELIX    3   3 ASN A  122  SER A  133  1                                  12    
[...]

例如,我只想采用'HELIX'行,然后是第4,第6,第7和第9列。我开始用for循环逐行读取文件,然后从'HELIX'开始提取那些行......这就是全部。

编辑:这是我现在的代码,但打印不能正常工作,只打印每个块的第一行(HELIX SHEET和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)

4 个答案:

答案 0 :(得分:1)

查看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]

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

有没有理由你不能只使用拆分?

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

答案 3 :(得分:0)

您可以根据需要使用关键词。 结果是列表包含关键字的行 你可以做进一步的结果处理来得到你想要的东西

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