2013-03-07 30 views
0

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

这里我的代码至今:

# -*- 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 

任何建议或是否有更简单的方法来做到这一点?

感谢

+0

这样你比较文件1的第1行和文件2的第1行,等等..这是你想要的吗?另外,我不确定你列出的是什么,你能提供一个输出文件应该看起来像或现在看起来像样的样本吗? – jurgenreza 2013-03-07 17:57:36

+0

我认为这有效吗?至少,它似乎是做你想做的。在这种情况下,你可能会更好[codereview](http://codereview.stackexchange.com/)。 – Evert 2013-03-07 17:59:58

+0

如果您提供一些示例输入和预期的输出文件,它将会有所帮助。两个输入文件总是有相同的行数?如果没有,那么你的代码可能无法正常工作。另外,你可能需要'outPut.write(“\ t”.join(x)+“1”)''和'outPut.write(“\ t”.join(x)+“0”)''。你真的想在输出中用'\ t'分隔'x'的每个字符吗?另外,你的目标是什么?你看过Python的['difflib'](http://docs.python.org/2/library/difflib.html)模块吗?如果你想比较文本文件,这可能会有所帮助。 – crayzeewulf 2013-03-07 18:26:11

回答

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 

符合您的规定要求:文本-1的原始内容,如果匹配则加上一个值为1的新列,如果不匹配,则加上0。

+0

是的,谢谢。这应该工作。唯一的事情,“压缩()”似乎压缩文件到最短的一个,对我来说什么是没有用的,因为我想保留原始列表。我也尝试使用izip.longest(),但值f“y”是错误的,所有值将为0直到现在。我在这里错过了什么? (对于迟到的回答,我正在旅行) – 2013-03-12 19:30:30

相关问题