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

1 投票
4 回答
11122 浏览
提问于 2025-04-20 21:44

我正在尝试处理一个来自蛋白质数据银行的文件,这个文件是用空格分开的(不是用\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

你可以根据需要扩展关键词。 结果会是一个包含关键词的列表。 你可以对这个结果进行进一步处理,以获得你想要的内容。

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

你有没有想过为什么不能直接用split呢?

for line in open('myfile'):
  if line.startswith('HELIX')
    cols = line.split(' ')
    process(cols[3], cols[5], cols[6], cols[8])
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

如果你已经提取了那一行内容,你可以用 line.split() 来把它分开。这样做会得到一个列表,你可以从中提取出你需要的所有元素:

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

撰写回答