Python 比较文本文件列表索引超出范围
我有两个包含URL的文本文件。我正在尝试比较这两个文件并打印链接(如果两个文件中都存在)。代码为:Python 比较文本文件列表索引超出范围,python,compare,text-files,Python,Compare,Text Files,我有两个包含URL的文本文件。我正在尝试比较这两个文件并打印链接(如果两个文件中都存在)。代码为: 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] == file
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
任何帮助都非常有用您必须执行
范围
:
for i in range(0,len(file1rl)):
for j in range(0,len(file2rl)):
如果您在没有范围的情况下执行此操作,它将只在
i
上作为元组的元素进行迭代
:(0,len(file1rl))
,这不是您想要的。除非您的文件很大,否则使用集合查找交点会容易得多:
print set(file('urllist.txt')) & set(file('test.txt'))
现在使用的算法将第一个文件中的每一行与第二个二次性能文件中的每一行进行比较 您只是忘记了范围(0,len(file1rl))中i的
范围
:
一些提示:
你可以这样做:
for i in file1rl:
for j in file2rl:
if (i == j):
甚至,你也可以用
[item for item in file1rl if item in file2rl]
编辑:
@乔治用set
技巧指出了一个很好的技巧
如果您熟悉
diff
我会使用集合
来实现高效查找,您也可以查看模块的:
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())
正如@sshashank124所说,
range
将解决您的错误。但这是一种更具python风格的方式:
for file1line in file1rl:
for file2line in filr2rl:
if file1line == file2line:
print file1line
这绝对是最好的!