如何从文本文件中删除第2列和第3列?蟒蛇

时间:2014-04-22 14:21:04

标签: python bash cut tab-delimited

我有一个制表符分隔的文件,其中包含以下行:

foo bar bar <tab>x y z<tab>a foo foo
...

想象一下1,000,000行,每行最多200个单词。每个单词平均5-6个字符。

到第2和第3列,我可以这样做:

with open('test.txt','r') as infile:
  column23 = [i.split('\t')[1:3] for i in infile]

或者我可以使用unix,How can i get 2nd and third column in tab delim file in bash?

import os
column23 = [i.split('\t') os.popen('cut -f 2-3 test.txt').readlines()]

哪个更快?有没有其他方法可以提取第2和第3列?

2 个答案:

答案 0 :(得分:3)

两者都不使用。除非证明速度太慢,否则请使用csv模块,该模块更具可读性。

import csv
with open('test.txt','r') as infile:
    column23 = [ cols[1:3] for cols in csv.reader(infile, delimiter="\t") ]

答案 1 :(得分:1)

如果每行可以有数百个以制表符分隔的条目,并且您只想要第二个和第三个,那么您不需要split所有条目;您可以使用maxsplit参数来加快速度:

with open('test.txt','r') as infile:
    column23 = [i.split('\t', 3)[1:3] for i in infile]

谁知道,也许一个聪明的正则表达式会更快:

import re
regex = re.compile("^[^\t\n]*\t([^\t\n]*)\t([^\t\n]*)", re.MULTILINE)
with open('test.txt','r') as infile:
    columns23 = regex.findall(infile.read())