比较文本文件列表索引超出范围

时间:2014-04-07 11:18:02

标签: python compare text-files

我有两个包含网址的文本文件。我试图比较两个文件并打印链接,如果它们存在于两个文件中。代码是:

file1 = open('urllist.txt','r')
file2 =  open('test.txt','r')

file2rl = file2.readlines()
file1rl = file1.readlines()

for i in (0,len(file1rl)):
 for j in (0,len(file2rl)):
  if (file1rl[i] ==  file2rl[j]):
   print file1rl[i]
  else:
   continue

但我收到的错误是:

if (file1rl[i] ==  file2rl[j]):
IndexError: list out of range 

Anyhelp非常有用

5 个答案:

答案 0 :(得分:2)

除非您的文件很大,否则使用集合来查找交叉点会更容易:

 print set(file('urllist.txt')) & set(file('test.txt'))

您现在使用的算法将第一个文件中的每一行与第二个二次性能中的每一行进行比较!

答案 1 :(得分:0)

你必须range

for i in range(0,len(file1rl)):
    for j in range(0,len(file2rl)):

如果您在没有范围的情况下执行此操作,则只会将ituple的元素作为(0,len(file1rl))的元素进行迭代,而这不是您想要的。

答案 2 :(得分:0)

你忘了rangefor i in range(0,len(file1rl))

一些提示:

你可以做一些事情:

for i in file1rl:
 for j in file2rl:
  if (i ==  j):

甚至,用

获取列表
[item for item in file1rl if item in file2rl]

编辑: @georg用set提示了一个很好的技巧。

如果您熟悉diff,也可以查看difflib模块。

答案 3 :(得分:0)

我会使用set来启用高效查找:

with open('urllist.txt', 'r') as f:
    urls = set(f.readlines())
with open('test.txt','r') as f:
    for line in f:
        if line in urls:
            print(line.strip())

答案 4 :(得分:0)

正如@ sshashank124所说,range会解决你的错误。但这是更多的Pythonic方式:

for file1line in file1rl:
    for file2line in filr2rl:
        if file1line == file2line:
            print file1line