如何遍历文件并提取包含特定值的列的行?

How to loop over a file and extract lines with column contaning a certain value?

我有一个包含很多行的文件,如下所示:

one two three four
one three four five
one one three four
one two three four

我写了一个函数,需要输入每行的第一个词和最后一个词。

但仅在第二个字为"two"的情况下, 所以在最好的情况下,我应该提取某些行并删除单词,并且应该得到这个:

one four
one four

由于单词 2 可以出现在其他列中,我不能只搜索该单词并将该行提取到新文件中。我是否应该以某种方式将其转换为 csv,然后从那里开始工作?

目前我的脚本只删除文本文件的前 4 列

f = open("blah.txt", "r")
g = open("datafile_fixed.txt", "w")

for line in f:
    if line.strip():
        g.write(" ".join(line.split()[4:]) + "\n")

f.close()
g.close()

所以我已经删除了部分原始文件。我可以神奇地去除更多线条以删除我不想要的线条吗?最重要的是能够只留下行,然后我可以轻松删除第二列和第三列。

只需要添加一个条件来检查第二个单词是否是 two:

with open('blah.txt', mode='r') as f, open('datafile_fixed.txt', mode='w') as g:
    for line in f.readlines():
        w1, w2, _, w4 = line.split()
        if w2 == 'two':
            g.write(w1 + ' ' + w4)

这里的重点是w1, w2, _, w4 = line.split()。 split 所做的是 return 一个字符串列表,在用指定的分隔符分隔给定的字符串之后(在这个没什么,默认情况下指的是一个 space),所以它会 return 一个列表有 4 个元素 ["one", "two", "three", "four"].

Python 如果您将它分配给多个变量(与列表长度相同的数字),则允许解压缩此列表,因此通过执行 w1, w2, w3, w4 = ["one", "two", "three", "four"] 您将 "one" 分配给 w1, "two"w2 等等.

然后,我们只需要检查第二个单词是否是"two"。如果是这样,我们将写入新文件。否则我们将不对这一行做任何事情并跳到循环中的下一行,做同样的事情。