如果匹配,则将值添加到新列中的文件

时间:2013-03-07 17:39:19

标签: python

我知道这应该很简单,但是因为我是python中的新手,所以在将值和列添加到文件时遇到了一些问题。我有两个文件,我想找到匹配的行,如果行匹配我想要一个值为1的新列,如果不匹配则应该得到0.这应该写在file-1或outPut中。我在添加值时遇到问题。

到目前为止我的代码:

# -*- 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 个答案:

答案 0 :(得分:1)

现在,您的代码会产生错误:TypeError: cannot concatenate 'str' and 'int' objects。执行"\t".join(x) + 1时会发生此错误,因为join的结果是字符串,1是整数。您应该用引号括起数字:outPut.write("\t".join(x) + "1")

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

文本1.txt的

foo
bar
baz

文本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。