2014-04-03 63 views
0

我有兩個文件:逃脫if語句

file1 = "line1\n line2\n line3\n" 
file2 = "line1\n line2\n line3\n line4\n line5\n" 

和我要的是:

打印所有的文件2與文件替換僅與普通長度線線1

我試過了。

for line in file1.splitlines(): 
    for l in file2.splitlines(): 
     if len(line) == len(l): 
      print file2.replace(l, line) 

問題是,結果只包含具有相同長度的行,而不包含file2中的所有行。我明白這是由if語句引起的,但我怎麼能逃避這一點。

+2

您能否重新說明您的問題? – sshashank124

+0

我更新了問題 – 5555555555

+0

使用嵌套循環,可以打印到(file1 * file2)行,因爲您爲第一個文件中的每一行迭代第二個文件。你只需要一個循環,絕對不是嵌套循環。 – x3al

回答

0

也許這樣?我不太瞭解您的問題,對不起:

for line in file1.splitlines(): 
    for i,l in enumerate(file2.splitlines()): 
     if len(line) == len(l): 
      file2[i] = file2.replace(l, line) 
print file2 
+0

它無需更改即可打印file2 – 5555555555

+0

@ 5555555555,回答已更新。現在應該工作,希望。如果沒有,請將更多的代碼置疑,我會嘗試進一步調試。祝你好運。 :) – sshashank124

+0

file2 [i] = file2.replace(l,line) TypeError:'unicode'對象不支持項目分配 – 5555555555

0

您的問題可能與您指定的問題不完全相同。你可以這樣做,而不是:

def file_compare(file1, file2): 
    for file1line, file2line in zip(file1.splitlines(), file2.splitlines()): 
     yield file1line if len(file1line) == len(file2line) else file2line 

file3.writelines(file_compare(file1, file2)) 

這個文件一起走過每一行。對於每一行,根據約束返回一個或另一個(在這種情況下,如果長度相等,則返回file1中的行,否則返回文件2中的行)。書寫線可以將此生成器作爲輸入將行寫入另一個文件。

+0

但兩個文件中的行數不等於 – 5555555555

0

Assumming文件1短:

lines1 = file1.splitlines() 
lines2 = file2.splitlines() 
for num, line in enumerate(lines1): 
    line2 = lines2[num] 
    print line if len(line2) == len(line) else line2 
for line in lines2[num+1:]: 
    print line 

有了實際的文件更容易,因爲你可以下一個濫用()迭代線:

file1 = open("file1.txt") 
file2 = open("file2.txt") 
for line in file1: 
    line2 = next(file2) 
    print line if len(line2) == len(line) else line2 
for line in file2: 
    print line  

那麼,你可以使用itertools.zip_longest但它的欺騙:

from itertools import izip_longest 
file1 = "line1\n line2\n line3\n" 
file2 = "line1\n line2\n line3\n line4\n line5\n" 
for line1, line2 in izip_longest(file1.splitlines(), file2.splitlines(), fillvalue=''): 
    print line1 if len(line2) == len(line1) else line2 

編輯:在py2 zip_longest被稱爲izip_longest。