Python 在文件中添加匹配值到新列
我知道这应该很简单,但因为我刚学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 个回答
现在你的代码出现了一个错误: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。