【发布时间】:2019-01-03 17:18:00
【问题描述】:
我是一个 Python 3.7 项目中的 YAML 新手,我决定使用 ruamel.yaml 来帮助我入门。我打算用它来存储与一些视频文件相关的元数据。
我正在使用以下代码创建 YAML 文件:
data[filename] = [{'video': video_path},
{'key_frame': frame_path},
{'processed': get_timestamp()}]
yaml.dump(data, file_handle)
创建的 YAML 文件如下所示:
video.mp4:
- video: /Users/xyz/video.mp4
- key_frame: /Users/xyz/imgOutput/frame
- Trigger.jpg
- processed: '2018-07-26 17:09:06'
问题在于 key_frame 是一个名为“frame - Trigger.jpg”的文件。但是,该行总是在文件名中的“ - ”(即空格-破折号-空格)处中断。结果是,作为一个人类可读的文件,它看起来非常错误。事实上,当它被读回(使用 yaml.open)时,它被正确处理,并被视为应有的单个字符串文件名。只是 YAML 文件中的格式有问题。
对原因有什么想法吗?这是预期的行为吗?我已经尝试了许多不同的方式来引用字符串以防万一(这没有什么区别 - 甚至引用它会分开行),但从代码意义上讲,它从根本上是有效的 - 但作为 YAML 的大卖重点是人类可读的文件,最好了解导致它的原因以及如何修复它。
【问题讨论】:
-
做更多的实验: - 如果字符串是
frame - trigger.jpg,它会像上面一样中断(在新行上破折号)。 - 如果字符串是frame- trigger.jpg,它会中断(但在第一行保留破折号)。 - 如果字符串是frame -trigger.jpg,它会中断(并且破折号在新行上)。 - 如果字符串是frame-trigger.jpg,它不会换行。所以本质上,一个或两边有空格的破折号会导致一个换行符被添加到格式中,但是当 ruamel.yaml 读回它时,这个换行符会被忽略。 -
如果您的问题不完整,请不要添加评论,使用附加信息更新问题。不要不要在新文本之后使用Edit::始终确保文本是一个连贯的整体。正如我的回答中所指出的,总是提供了一个最小但完整的工作程序来产生输出(或错误)。如果您不这样做,您可能会关闭您的帖子;更容易发现哪里出错了;您可能会在最小化程序以重现不需要的行为的过程中找到解决方案。
标签: python-3.x yaml ruamel.yaml