如何从文本文件中删除第二和第三列?python
我有一个用制表符分隔的文件,里面的行是这样的:
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,如何在bash中获取制表符分隔文件的第2列和第3列?
import os
column23 = [i.split('\t') os.popen('cut -f 2-3 test.txt').readlines()]
哪种方法更快?还有其他方法可以提取第2列和第3列吗?
2 个回答
1
如果每行可能有成百上千个用制表符分隔的条目,而你只想要第二个和第三个条目,那么你就不需要把所有的条目都分开。其实有一个叫做 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())
3
别用这两个。除非你发现速度太慢,否则可以使用 csv
模块,因为它更容易读懂。
import csv
with open('test.txt','r') as infile:
column23 = [ cols[1:3] for cols in csv.reader(infile, delimiter="\t") ]