Python 在文件中添加匹配值到新列

0 投票
1 回答
1717 浏览
提问于 2025-04-17 18:17

我知道这应该很简单,但因为我刚学Python,所以在往文件里添加值和列时遇到了一些问题。我有两个文件,我想找到匹配的行。如果有行匹配,我想在新的一列里填上1;如果不匹配,就填上0。这些结果应该写入文件1或者输出文件。我在添加这些值时遇到了麻烦。

这是我到目前为止写的代码:

# -*- coding: utf8 -*-

f1 = open('text-1.txt', 'r')
f2 = open('text-2.txt', 'r')

fileOne= f1.readlines()
fileTwo = f2.readlines()

outPut = open('output.txt', 'w')

for x,y in zip(fileOne,fileTwo):
    if x==y:
        outPut.write("\t".join(x) + 1)

    else:
        outPut.write("\t".join(x) + 0)


f1.close()
f2.close()
outPut.close

有没有什么建议,或者有没有更简单的方法来做到这一点?

谢谢!

1 个回答

1

现在你的代码出现了一个错误:TypeError: cannot concatenate 'str' and 'int' objects。这个错误是因为你在做 "\t".join(x) + 1 时,join 的结果是一个字符串,而 1 是一个整数。你应该把数字用引号包起来:outPut.write("\t".join(x) + "1")

现在你的代码可以运行了。使用这些文件作为输入:

text-1.txt

foo
bar
baz

text-2.txt

qux
bar
qux

输出结果是:

f   o   o   
0b  a   r   
1b  a   z0

这可能不是你想要的结果;我猜你是想要每一行原本的样子,后面跟一个制表符,然后是一个 1 或 0。如果是这样的话,outPut.write("\t".join(x) + "1") 不是正确的做法。"\t".join(x) 会在原始文本的每个字符之间插入一个制表符。如果你想要的是未修改的文本加一个制表符再加一个数字,那就用 outPut.write(x + "\t1")

现在的输出是:

foo
    0bar
    1baz    0

这个结果更接近了——每个字符之间不再有制表符,但数字出现在了错误的行。这是因为 x 是原始行的内容,包括 结尾的换行符。如果你想让数字出现在换行符之前,你需要去掉换行符,然后在最后加一个新的换行符:outPut.write(x.rstrip() + "\t1\n")

f1 = open('text-1.txt', 'r')
f2 = open('text-2.txt', 'r')

fileOne= f1.readlines()
fileTwo = f2.readlines()

outPut = open('output.txt', 'w')

for x,y in zip(fileOne,fileTwo):
    if x==y:
        outPut.write(x.rstrip() + "\t1\n")

    else:
        outPut.write(x.rstrip() + "\t0\n")


f1.close()
f2.close()
outPut.close()

现在的输出是:

foo 0
bar 1
baz 0

这符合你所说的要求:text-1 的原始内容,加上一列,如果匹配则值为 1,不匹配则为 0。

撰写回答