我有两个包含网址的文本文件。我试图比较两个文件并打印链接,如果它们存在于两个文件中。代码是:
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非常有用
答案 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)):
如果您在没有范围的情况下执行此操作,则只会将i
:tuple
的元素作为(0,len(file1rl))
的元素进行迭代,而这不是您想要的。
答案 2 :(得分:0)
你忘了range
:for 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