Python: 索引制表符分隔的文件

2 投票
5 回答
59847 浏览
提问于 2025-04-16 00:41

我有一个文本文件,里面的数据是用制表符分隔的,内容大概是这样的:

1_0 NP_045689 100.00 279 0 0 18 296 18 296 3e-156 539

1_0 NP_045688 54.83 259 108 6 45 296 17 273 2e-61 224

我需要提取特定的列,比如第二列。

我尝试用下面的代码来实现:

z = open('output.blast', 'r')
for line in z.readlines():
    for col in line:
        print col[1]
z.close()

但是我遇到了“索引超出范围”的错误。

5 个回答

3
import csv,StringIO
text="""1_0 NP_045689   100.00  279 0   0   18  296 18  296 3e-156  539
1_0 NP_045688   54.83   259 108 6   45  296 17  273 2e-61   224"""

f = csv.reader(StringIO.StringIO(text), delimiter='\t')
for row in f:
    print row[1]

有两件事需要注意:

reader方法中的分隔符参数告诉csv模块如何将文本行拆分开。你可以查看reader函数的其他参数,以扩展功能(比如:quotechar)。

我使用StringIO将文本示例包装成一个文件对象,如果你使用的是文件引用,就不需要这个了。

例如:

f=csv.reader(open('./test.csv'),delimiter='\t')
7
z = open('output.blast', 'r')
for line in z.readlines():
    cols = line.split('\t'):
        print cols[1]
z.close()

你需要先用 split() 方法把这一行按照制表符(Tab键)分开。

另外,你也可以使用 Python 的 csv 模块,选择制表符作为分隔符来处理。

5

你可以看看这个csv模块。如果你打算对用制表符分隔的文件做更多的操作,这个模块会对你很有帮助。一个不错的地方是,你可以给不同的列起名字。

撰写回答