首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >循环并加载包含yaml文件的压缩文件夹

循环并加载包含yaml文件的压缩文件夹
EN

Stack Overflow用户
提问于 2019-07-15 01:12:49
回答 1查看 753关注 0票数 1

我有一个包含15000个yaml文件的压缩文件夹。我想使用yaml.safe_load遍历文件夹,以便每个文件都是字典格式的,并且可以从每个文件中提取所需的信息。到目前为止,我已经使用zipfile.ZipFile和yaml.safe_load编写了一些代码,但它只适用于压缩文件夹中的第一个文件。有没有人介意看一眼,解释一下我的误解?

代码语言:javascript
复制
zip_file = zipfile.ZipFile("D:/export.zip")
files = zip_file.namelist()
print(files)
for i in range(10):
    with zip_file.open(files[i]) as yamlfile:
        yamlreader = yaml.safe_load(yamlfile)
        print(yamlreader["identifier"]) 

现在,我只需要遍历10个文件,让工作变得更简单。最终,我想做全部的15,000个。"identifier“是yaml文件中的一个键。

这是错误:

代码语言:javascript
复制
10.5281/zenodo.1014773
Traceback (most recent call last):
  File "C:/Users/estho/PycharmProjects/GSOC3/testing_dataextraction.py", line 20, in <module>
    yamlreader = yaml.safe_load(yamlfile)
  File "C:\Users\estho\PycharmProjects\GSOC3\lib\site-packages\yaml\__init__.py", line 162, in safe_load
    return load(stream, SafeLoader)
  File "C:\Users\estho\PycharmProjects\GSOC3\lib\site-packages\yaml\__init__.py", line 114, in load
    return loader.get_single_data()
  File "C:\Users\estho\PycharmProjects\GSOC3\lib\site-packages\yaml\constructor.py", line 41, in get_single_data
    node = self.get_single_node()
  File "C:\Users\estho\PycharmProjects\GSOC3\lib\site-packages\yaml\composer.py", line 36, in get_single_node
    document = self.compose_document()
  File "C:\Users\estho\PycharmProjects\GSOC3\lib\site-packages\yaml\composer.py", line 55, in compose_document
    node = self.compose_node(None, None)
  File "C:\Users\estho\PycharmProjects\GSOC3\lib\site-packages\yaml\composer.py", line 84, in compose_node
    node = self.compose_mapping_node(anchor)
  File "C:\Users\estho\PycharmProjects\GSOC3\lib\site-packages\yaml\composer.py", line 127, in compose_mapping_node
    while not self.check_event(MappingEndEvent):
  File "C:\Users\estho\PycharmProjects\GSOC3\lib\site-packages\yaml\parser.py", line 98, in check_event
    self.current_event = self.state()
  File "C:\Users\estho\PycharmProjects\GSOC3\lib\site-packages\yaml\parser.py", line 428, in parse_block_mapping_key
    if self.check_token(KeyToken):
  File "C:\Users\estho\PycharmProjects\GSOC3\lib\site-packages\yaml\scanner.py", line 116, in check_token
    self.fetch_more_tokens()
  File "C:\Users\estho\PycharmProjects\GSOC3\lib\site-packages\yaml\scanner.py", line 260, in fetch_more_tokens
    self.get_mark())
yaml.scanner.ScannerError: while scanning for the next token
found character '\t' that cannot start any token
  in "yamlfile_10_5281_zenodo_1745362.yaml", line 4, column 1

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-15 01:23:12

在我看来,在"yamlfile_10_5281_zenodo_1745362.yaml"文件中有一个错误的令牌名称。尝试在没有此文件的情况下运行它。在python中,\t代表一个制表符,因此如果不对其进行转义,通常不能将其包含在字符串ect中。

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

https://stackoverflow.com/questions/57029540

复制
相关文章

相似问题

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