2014-09-10 354 views
1

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

我需要在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表和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) 
+0

你能后目前你有什么样的代码? – GHC 2014-09-10 14:41:07

+0

请发布您的代码。你的问题具体是什么? – idanshmu 2014-09-10 14:41:54

+0

我的代码中有一团糟,这就是为什么我没有发布它......我甚至不知道我现在在做什么。我的具体问题是我需要查找以'HELIX'开头的行,具体列。对于以'SHEET'开头的行,还有其他特定的列等等。所以,我在阅读了一些评论之后做了这些: for line in open(sys.argv [1]): \t如果'HELIX'符合: \t \t COLS = line.split() \t \t打印(COLS [0],COLS [3],COLS [5],COLS [6],COLS [8]) 事情是:我想不必对'SHEET'开始的那些行进行相同的操作(只更改我想要提取的列的位置)。 – 2014-09-10 15:10:54

回答

1

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

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

看一看的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] 
0

有没有你不能只用分裂的理由?

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

最后一列应该是“97”和“122”,但是最后一列返回“97”和“”,因为122是三位数字,并且会改变“A”和最终数字之间的空格数量,并且,因此,列的数量...... – 2014-09-10 15:01:58

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] 
相关问题