2017-04-20 32 views
1

我試圖用file2中更正後的值替換file1中具有「錯誤」的行(請參見下文)。比較兩個文本文件,替換第一個文件中包含第二個文件中的行的字符串的行

文件1:

MAGA 0.0159 
TTKI error 
MCCN 0.0391 
NEFD 0.9982 
ESYA error 

文件2:

TTKI 0.7652 
ESYA 0.5517 

所需的輸出:

MAGA 0.0159 
TTKI 0.7652 
MCCN 0.0391 
NEFD 0.9982 
ESYA 0.5517 

下面是我怎麼一直在努力做,但我覺得我的方式在過去的一個小時左右,越來越沮喪,所以任何幫助,將不勝感激。

section2 = [] 

f2 = open('file2', 'r') 

for line2 in f2: 
    section2.append(str(line2.split(' ',0))) 

f1 = open('file1', 'r') 

for line1 in f1: 
    if str(section2[0]) in line1: 
     print section2[0] 
    else: 
     print line1 

回答

1

您可以創建正確的價值觀

dict2 = {} 
for line in f2: 
    key, value = line.split(' ') 
    dict2[key] = value 

然後

for line1 in f1: 
    key, value = line1.split(' ') 
    if value == 'error': 
     print(key, dict2[key]) 
    else: 
     print(line1) 
1

使用字典而不是數組的dict

corrections = {} 

f2 = open('file2.txt', 'r') 

for line2 in f2: 
    (key, value) = line2.split(' ') 
    corrections[key] = value 

f1 = open('file1.txt', 'r') 

for line1 in f1: 
    (key, value) = line1.split(' ') 
    if key in corrections: 
     print(key, corrections[key]) 
    else: 
     print(line1) 

這是怎麼了你的字典看起來像它讀出的校正後的文件:

{'TTKI': '0.7652', 'ESYA': '0.5517'} 

file1時被讀出的線也分割只是爲了檢查如果第一個值是在詞典(key in corrections)的關鍵之一。如果不是,則只打印原始行(即使它包含error)。但如果我們有更正,它會被打印出來(print (key, corrections[key])。這裏我們使用print在它的參數之間插入一個空格的事實。

1

這裏是一個簡單的邏輯:

打開第二個文件,並創建一個字典出這一點。 閱讀文件1線/線線錯誤 搜索, 如果發現 獲取錯誤線 的第一個字從詞典中得到相應的值 與值替換錯誤你有 寫行至第3文件

1
file1 = 'f1.txt' 
file2 = 'f2.txt' 
with open(file1, 'r') as file: 
    file1data = file.read() 
with open(file2, 'r') as file: 
    file2data = file.read() 

x = file1data.split('\n') 
y = file2data.split('\n') 

for i in x: 
    for j in y: 
     if i[:4] == j[:4]: 
     file1data = file1data.replace(i,j) 

with open(file1, 'w') as file: 
    file.write(file1data) 
相關問題