如何从文本文件中删除第二和第三列?python

0 投票
2 回答
2261 浏览
提问于 2025-04-18 03:45

我有一个用制表符分隔的文件,里面的行是这样的:

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") ]

撰写回答