首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >xmltodict错误

xmltodict错误
EN

Stack Overflow用户
提问于 2016-04-01 20:52:48
回答 1查看 727关注 0票数 0

编辑:我可以打印“‘contributor”修订版一段时间,但每次尝试访问“’contributor”修订版都会返回以下内容

代码语言:javascript
复制
 TypeError: string indices must be integers

原始帖子:我正在尝试使用xml从xml中提取数据,以便使用代码进行字典:

代码语言:javascript
复制
import xmltodict, json

with open('Sockpuppet_articles.xml', encoding='utf-8') as xml_file:
    dic_xml = xmltodict.parse(xml_file.read(), xml_attribs=False)
    print("parsed")
    for page in dic_xml['mediawiki']['page']:
        for rev in  page['revision']:
            for user in open("Sockpuppet_names.txt", "r", encoding='utf-8'):
                user = user.strip()

                if 'username' in rev['contributor'] and rev['contributor']['username'] == user:
                    dosomething()

在if语句的最后一行中,我得到了这个错误:

代码语言:javascript
复制
TypeError: string indices must be integers

奇怪的是,它可以在另一个xml文件上工作。

EN

回答 1

Stack Overflow用户

发布于 2020-11-27 07:50:43

当下一级只有一个元素时,我得到了同样的错误。

代码语言:javascript
复制
...

## Read XML
pastas = [os.path.join(caminho, name) for name in os.listdir(caminho)]
pastas = filter(os.path.isdir, pastas)
for pasta in pastas:
    for arq in glob.glob(os.path.join(pasta, "*.xml")):
        xmlData = codecs.open(arq, 'r', encoding='utf8').read()
        xmlDict = xmltodict.parse(xmlData, xml_attribs=True)["XMLBIBLE"]
        bible_name = xmlDict["@biblename"]
        list_verse = []
        for xml_inBook in xmlDict["BIBLEBOOK"]:
            bnumber = xml_inBook["@bnumber"]
            bname = xml_inBook["@bname"]
            for xml_chapter in xml_inBook["CHAPTER"]:
                cnumber = xml_chapter["@cnumber"]
                for xml_verse in xml_chapter["VERS"]:
                    vnumber = xml_verse["@vnumber"]
                    vtext = xml_verse["#text"]
...


TypeError: string indices must be integers

当书是"Obadiah“时,就会出现错误。它只有一章。

裁剪章节值我们可以看到下面的视图。那么假设xml_chapter也是一样的。只有当这本书有多个章节时,这才是真的:

但是循环返回"@cnumber“而不是OrderedDict。

我解决了当只有一个章节时将OrderedDict转换为List的问题。

代码语言:javascript
复制
...

            if len(xml_inBook["CHAPTER"]) == 2:
                xml_chapter = list(xml_inBook["CHAPTER"].items())
                cnumber = xml_chapter[0][1]
                for xml_verse in xml_chapter[1][1]:
                    vnumber = xml_verse["@vnumber"]
                    vtext = xml_verse["#text"]
...

我使用的是Python 3,6。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36356885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档