编辑:我可以打印“‘contributor”修订版一段时间,但每次尝试访问“’contributor”修订版都会返回以下内容
TypeError: string indices must be integers原始帖子:我正在尝试使用xml从xml中提取数据,以便使用代码进行字典:
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语句的最后一行中,我得到了这个错误:
TypeError: string indices must be integers奇怪的是,它可以在另一个xml文件上工作。
发布于 2020-11-27 07:50:43
当下一级只有一个元素时,我得到了同样的错误。
...
## 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的问题。
...
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。
https://stackoverflow.com/questions/36356885
复制相似问题