2014-04-03 64 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。