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

2024-05-20 00:05:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试处理蛋白质数据库中的一个文件,该文件由空格(而不是\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)

Tags: 文件inforlineserprosheetsplit
3条回答

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

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

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

有什么理由不能直接使用split吗?

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

相关问题 更多 >