我正在脚本中使用循环将大量网址写入这样的txt文件中:
fwrite = open('visited.txt', 'a')
fwrite.write('\n{0}'.format(url))
fwrite.close()
然后,当我稍后重新运行时,我不想处理访问的链接,因此我要这样做:(访问是新/旧URL的列表)
for x in visit:
if x in open('visited.txt').read().lstrip('\r\n'):
visit.remove(x)
else:
continue
但这总是跳过一半的行。如果有1000个网址,则只会删除其中的500个。在lstrip
和rtsrip
上都尝试过\n
/ \r\n
,但无法管理
答案 0 :(得分:1)
仅将行读入列表一次:
with open('visited.txt', 'r') as f:
visited = f.readlines()
如果您只希望保留非访问者,则可以将两个列表都转换为集合,并从另一个列表中减去一个,然后再转换回列表:
non_visited = list(set(visit) - set(visited))
答案 1 :(得分:1)
这是Python for loop skipping every other loop?的副本,但为清楚起见,这里是针对这种情况的解决方案:
with open('visited.txt') as f:
visited = f.read().splitlines()
visit = [url for url in visit if url not in visited]
顺便说一句,上下文管理使您的第一个代码片段更容易,并且我重新排列了\n
,因为换行符是行终止符,而不是分隔符,尤其是在类似于Unix的操作系统:
with open('visited.txt', 'a') as fwrite:
fwrite.write('{0}\n'.format(url))