我正在尝试读取目录中的所有Yaml文件,但遇到了麻烦。首先,因为我使用的是Python 2.7(并且不能更改为3),并且我的所有文件都是utf-8(并且我还需要它们保持这种方式)。
visit()
当我运行这段代码时,python给我消息:
// Wait 30 seconds for page 'load' event
cy.visit('/YOUR_PAGE', { timeout: 30000 })
我希望该程序显示文件的内容。谁能帮我吗?
答案 0 :(得分:0)
我猜问题出在文件路径上。 os.listdir(os.getcwd())返回目录中所有文件的列表。所以您将列表传递给codecs.open()而不是文件名
答案 1 :(得分:0)
除了格式化它的无效代码外,您的代码还有很多问题。
def yaml_reader(filepath):
with codecs.open(filepath, "r", encoding='utf-8') as file_descriptor:
data = yaml.load_all(file_descriptor)
return data
但是不必进行解码,PyYAML完全能够处理UTF-8:
def yaml_reader(filepath):
with open(filepath, "rb") as file_descriptor:
data = yaml.load_all(file_descriptor)
return data
我希望您意识到尝试加载多个文档并始终在data
中获得一个列表,即使您的文件包含一个文档也是如此。
然后一行:
filepath = os.listdir(os.getcwd())
为您提供文件列表,因此您需要执行以下操作:
filepath = os.listdir(os.getcwd())[0]
或以其他方式决定要打开哪个文件。如果要将所有文件(假设它们是YAML)合并到一个大的YAML文件中,则需要执行以下操作:
if __name__ == "__main__":
data = []
for filepath in os.listdir(os.getcwd()):
data.extend(yaml_reader(filepath))
print data
您的转储例程将需要更改为:
def yaml_dump(filepath, data):
with open(filepath, 'wb') as file_descriptor:
yaml.dump(data, file_descriptor, allow_unicode=True, encoding='utf-8')
但是,所有这些都会给您带来最大的问题:您正在使用PyYAML,这将使您的YAML混乱,丢弃流样式,注释,锚点名称,特殊的int / float,标量周围的引号等。除了PyYAML之外,未更新以支持YAML 1.2文档(自2009年以来成为标准)。我建议您切换到使用ruamel.yaml
(免责声明:我是该程序包的作者),该程序支持YAML 1.2,并保留注释等内容。
即使您必须使用Python 2,也应该使用Python 3之类的语法,例如可以通过print
导入获得from __future__
。
所以我建议您这样做:
pip install pathlib2 ruamel.yaml
然后使用:
from __future__ import absolute_import, unicode_literals, print_function
from pathlib import Path
from ruamel.yaml import YAML
if __name__ == "__main__":
data = []
yaml = YAML()
yaml.preserve_quotes = True
for filepath in Path('.').glob('*.yaml'):
data.extend(yaml.load_all(filepath))
print(data)
yaml.dump(data, Path('your_output.yaml'))