【发布时间】:2015-07-31 10:23:12
【问题描述】:
我有一个来自 Python HTMLParser 的 var vk_read,它处理这样的数据:['id168233095']
现在我正在尝试在脚本在列表中运行后从这个 var 'vk_read' 收集所有数据。应该是:['id168233095', 'id1682334534', 'id16823453', 'etc...']
if vk_read:
vk_ids = []
for line in vk_read:
if vk_read != '':
vk_ids.append(vk_read)
print(vk_ids)
这是结果:
['id168233095']
['id168233095', 'id168233095']
['id168233095', 'id168233095', 'id168233095']
['id168233095', 'id168233095', 'id168233095', 'id168233095']
['id168233095', 'id168233095', 'id168233095', 'id168233095', 'id168233095']
['id168233095', 'id168233095', 'id168233095', 'id168233095', 'id168233095', 'id168233095']
在更改了一些建议代码后(见本文末尾)
if vk_read not in vk_ids:
vk_ids.append(vk_read)
print(vk_ids)
但在这种情况下,结果是:
['id45849605']
['id91877071']
['id17422363']
['id119899405']
['id65045632']
['id168233095']
这意味着我的 vk_read 最多添加 10 次,然后我的脚本开始添加下一个。
也尝试list.insert()- 并得到相同的结果。 (!!!)
在脚本运行多次后,我如何运行此循环以在一个列表中捕获所有不同的结果,因为可以从解析的文件中找到数据。
注意事项:
我已按照list1.append(list0) 的建议更新了代码,但在我的情况下,此方法仍返回与上述相同的结果。
并更改了列表名称以避免进一步混淆。
最后更新 谢谢你们的帮助,伙计们,你们真的把我推到了正确的方向:same on stackoverflow
问题似乎是您在每次迭代中将列表重新初始化为一个空列表:
from html.parser import HTMLParser
import re, sys, random, csv
with open('test.html', 'r', encoding='utf-8') as content_file:
read_data = content_file.read()
vk_ids = []
class MyHTMLParser(HTMLParser):
def handle_starttag(self, tag, attrs):
href = str(attrs)
for line in href:
id_tag = re.findall('/\S+$', href)
id_raw = str(id_tag)
if re.search('/\w+\'\)\]', id_raw):
global vk_read
vk_read = id_raw
else:
break
for ch in ['/', ')', '[', ']', '"', "'"]:
if ch in vk_read:
vk_read = vk_read.replace(ch, "")
# https://stackoverflow.com/questions/30328193/python-add-string-to-a-list-loop
for vk_id in vk_read:
if vk_id not in vk_ids:
vk_ids.append(vk_read)
break
print(vk_ids)
break
注意 上次更改后
print(type(vk_ids))
<class 'list'>
【问题讨论】:
-
for line in vk_read:为什么不在 for 循环中使用line? -
最好不要将变量命名为
list,因为它会影响常用的内置函数。 -
list.insert(0, vk_read)是一种非常低效的操作,因为每次插入一个项目时,所有其他项目都需要向右移动一个位置。如果您的列表变大,这将变得非常缓慢。 -
@trianglesis 是你的实际缩进吗?如果是这样,
id_tag= re.findall(...)之后的所有内容都是错误的。我认为它应该都在for line in href循环中 -
@JulienSpronc 我已经做了一些改变
标签: python string list loops python-3.x