【发布时间】:2020-10-16 12:13:01
【问题描述】:
我正在使用 Django 3 和 Python 3.7。我正在尝试编写一个函数来输出格式正确的 YAML。我有这个...
def strip_invalid(s):
res = ''
for x in s:
if Reader.NON_PRINTABLE.match(x):
# res += '\\x{:x}'.format(ord(x))
continue
res += x
return res
...
yaml_street = load(strip_invalid(street.strip().encode("utf-8", 'ignore').decode("utf-8")))
问题是,如果“street”是“55 E JACKSON BLVD # 150”,则上述输出
55 E JACKSON BLVD
请注意,包括“#”在内的所有内容均已删除。如何调整上述内容以包含所有内容,但可能为 YAML 输出正确转义?
【问题讨论】:
-
向我们展示 YAML。
-
什么是
load?strip_invalid应该产生什么,一个文件名,一个有效的 YAML 字符串? -
@chepner,是的,该函数应该生成一个有效的 YAML 字符串,删除所有非 UTF-8 字符(或至少使所有字符 UTF-8 安全)
-
对不起,如果我在这里“大声”思考:从您下面的评论看来,您要么有 XY problem,您对
yaml.load所做的事情的误解导致您写下整个strip_invalid函数首先不应该出现。 要么您将此作为您自己对 YAML 理解的练习/挑战,然后您可能应该向我们提供load函数的来源及其代码(如果您自己编写)。 -
也许你可以通过解释你自己对
yaml = load('sting')在这里做什么的理解来澄清这一点。
标签: python python-3.x django utf-8 yaml