2013-03-07 59 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

相關問題