For循环仅迭代Python中的最后一个元素

指节

我正在遍历XML文档并匹配txt文件中的用户名。

txt看起来像:

DPL bot
Nick Number
White whirlwind
Polisci
Flannel

该程序如下所示:

    import xmltodict, json

with open('testarticles.xml', encoding='latin-1') as xml_file:
    dic_xml = xmltodict.parse(xml_file.read())
    for page in dic_xml['mediawiki']['page']:
        for rev in  page['revision']:
            for user in open("usernames.txt", "r"):
                print(user)

                if 'username' in rev['contributor'] and rev['contributor']['username'] == user:
                    print(user)
                    print(rev['timestamp'])
                    timestamp = rev['timestamp'];

                    try:
                        print(rev['comment'])
                        comment = rev['comment'];
                    except:
                        print("no comment")
                        comment = ''

                    print('\n')
                    with open("User data/" + user + ".json", "a") as outfile:
                        json.dump({"timestamp": timestamp, "comment": comment}, outfile)
                        outfile.write('\n')

问题在于该程序仅对文本文件的最后一行执行if语句。它在if语句之前打印所有用户的名称。所有用户在XML文件中都有匹配的帖子,并且通过在最后一行更改为另一个用户,将该用户的数据提取到json文件中。

Do

也许除最后一行外的所有行末尾都有换行符...

试试这个:

for user in open("usernames.txt", "r"):
    user = user.strip()
    if 'username' in rev['contributor'] and rev...

或使用此构造,这样我们就不必担心您的代码是否像with语句一样工作了:P

with open("usernames.txt", "r") as f:
    for line in f:
        user = line.strip()
        if 'username' in rev['contributor'] and rev...

最主要的是user = user.strip()user = line.strip()

如有疑问,请查看二进制文件。这同样适用于所有编码问题,因为编码只是根据某种转换表/代码页将一和零转换为字符的一种方式。

"\n".encode("hex") == "0a" # True
# so if
user.encode("hex") 
# has "0a" at the end, there is definitely a newline after "user"

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

For 循环只迭代列表中的最后一个元素

嵌套的for循环仅迭代最后一个条目[r]

Python:列表迭代仅返回最后一个值

迭代Python列表中的连续元素,以使最后一个元素与第一个元素结合

R 中的 for 循环只迭代最后一个条目

foreach循环仅输出数组中的最后一个元素

仅循环第一个和最后一个元素

Python For循环仅将最后一个值附加到列表中

循环中的Lambda存储在列表中,仅打印最后一个循环的评估值,而不是所有循环迭代中的不同值

能够仅访问Python Unicode字典中列表的最后一个元素

仅显示最后一个元素

Pygame / Python的For循环只使精灵列表中的最后一个元素

循环中的onclick仅引用循环中的最后一个元素

使... of跳过循环的最后一个元素

当与循环一起使用时,Ansible列表concat仅包含最后一个元素

通过 for 循环向元素添加事件会导致所有元素仅影响循环中的最后一个元素

使用迭代器中除最后一个元素之外的所有元素

带for循环的Javascript数组,仅返回最后一个元素

for循环中的功能。仅最后一个元素受影响

JavaScript执行循环,但仅查看数组中最后一个元素的结果

循环仅显示最后一个数组元素ActionScript3

foreach仅迭代数组的最后一个条目

如何获得_.forEach()循环中的最后一个迭代

如何在python中串联列表,但如果元素相等则仅保留相邻列表的最后一个或第一个元素

删除python中set的最后一个元素

Python:比较列表中的最后一个元素

Python将列表中的最后一个元素分组

使用Python中每个列表的最后一个元素

获取插入日期的次数,以了解Node.js中的最后一个for循环迭代