该程序假设获取一个文本文件并将其内容转换为一个列表,其中每个元素都是原始文本文件中的一行。从那里,我希望能够查看元素中是否包含另一个列表中的某些网站,如果是,则从列表中删除该元素。我不断收到ValueError
with open(hosts_temp, 'r+') as file1:
content = file1.read()
x = content.splitlines() #convert contents of file1 in to a list of strings.
for element in x:
for site in websites_list:
if site in element:
x.remove(element)
else:
pass
这是我得到的错误:
ValueError: list.remove(x): x not in list
答案 0 :(得分:1)
问题是您要从行数组中删除该行,然后尝试再次访问它。
例如,如果您的网站列表为
website_list = ["google","facebook"]
,您的x(行列表)为
["First sentence","Second sentence containing google","Last sentence"]
看着这个循环
for site in websites_list:
由于您与Google匹配,因此您将从x中删除第二个句子。但是,您还可以尝试检查第二句话是否包含“ facebook”。因为您已经从x列表中删除了第二句话,所以会出现错误。
我会建议逐行读取文件 ,而不是一次抓取所有行。如果该行没有网站名称,则将其添加到有效的列表集合中。
解决此问题的另一种pythonic方法是使用列表理解 如果您输入的内容不大
with open(hosts_temp, 'r+') as file1:
content = file1.read()
x = content.splitlines()
x = [line for line in x if all(w not in line for w in websites_list)]
优良作法是在遍历集合并沿途添加/删除元素时要非常小心。