当前位置: 首页 > 面试题库 >

Python中是否有支持将长字符串转储为块文字或折叠块的yaml库?

薛栋
2023-03-14
问题内容

我希望能够转储一个字典,该字典包含我希望以块样式包含的长字符串,以提高可读性。例如:

foo: |
  this is a
  block literal
bar: >
  this is a
  folded block

PyYAML支持这种样式的文档加载,但是我似乎找不到找到这种方式转储文档的方法。我想念什么吗?


问题答案:
import yaml

class folded_unicode(unicode): pass
class literal_unicode(unicode): pass

def folded_unicode_representer(dumper, data):
    return dumper.represent_scalar(u'tag:yaml.org,2002:str', data, style='>')
def literal_unicode_representer(dumper, data):
    return dumper.represent_scalar(u'tag:yaml.org,2002:str', data, style='|')

yaml.add_representer(folded_unicode, folded_unicode_representer)
yaml.add_representer(literal_unicode, literal_unicode_representer)

data = {
    'literal':literal_unicode(
        u'by hjw              ___\n'
         '   __              /.-.\\\n'
         '  /  )_____________\\\\  Y\n'
         ' /_ /=== == === === =\\ _\\_\n'
         '( /)=== == === === == Y   \\\n'
         ' `-------------------(  o  )\n'
         '                      \\___/\n'),
    'folded': folded_unicode(
        u'It removes all ordinary curses from all equipped items. '
        'Heavy or permanent curses are unaffected.\n')}

print yaml.dump(data)

结果:

folded: >
  It removes all ordinary curses from all equipped items. Heavy or permanent curses
  are unaffected.
literal: |
  by hjw              ___
     __              /.-.\
    /  )_____________\\  Y
   /_ /=== == === === =\ _\_
  ( /)=== == === === == Y   \
   `-------------------(  o  )
                        \___/

为了完整起见,还应该有str实现,但是我会很懒惰:-)



 类似资料:
  • 问题内容: 我发现运行以下命令时,python的json模块(自2.6起包含)将int字典键转换为字符串。 有什么简单的方法可以将键保留为int,而无需在转储和加载时解析字符串。我相信可以使用json模块提供的钩子,但这仍然需要解析。我可能会忽略一个论点吗?欢呼声,查兹 子问题:感谢您的回答。看到j​​son像我所担心的那样工作,是否有一种简单的方法可以通过解析转储的输出来传达密钥类型?我还要注意

  • 问题内容: 我有一个名称为dash的现有python模块foo-bar.py 我希望避免更改模块名称,因为该模块是共享的,我将不得不追踪所有使用该模块的位置,以便我的特殊情况能够起作用。 有没有办法加载名称包含通常被禁止的“-”的模块? (我确实知道这不是最佳实践。但是,在这种情况下,我宁愿不要重新设计和测试更多的应用程序。而且,我不认为我的公司老板会赞成我花时间实施这样的变化。) 问题答案: 您

  • 问题内容: 我想将字符串转换为最严格的数据类型:int或float。 我有两个字符串: 如何在Python中确定value1应该为Float,value2应该为Integer? 问题答案:

  • 以下设置: 两个变量都表示语义相等的ID。由于应用程序是针对移动设备的,因此以最有效的方式进行这些变量的比较非常重要。 将这些变量与此代码片段进行比较是否有效, 还是用这个?

  • 问题内容: 我正在为具有二进制文件的项目创建图表,该二进制文件在执行时会生成YAML格式的配置文件,如下所示: 我的图表需要读取该文件并将其所有值加载到容器中的环境变量中,因此我在文件中创建了一个变量,安装图表后,我使用以下命令传递文件内容: 接下来,我创建一个具有的值: 我遇到的问题是我需要使用以下值做两件事: 在所有键之前添加预定义的值(因此,在上面的示例中,我将其作为键) 确保所有值都是字符

  • 问题内容: 我正在使用以下代码从外部程序获取标准输出: 方法返回一个字节数组: 但是,我想将输出作为普通的字符串使用。这样我就可以像这样打印它: 我认为这就是方法的用途,但是当我尝试使用它时,我又得到了相同的字节数组: 如何将字节值转换回字符串?我的意思是,使用”batteries”而不是手动进行操作。我希望它与Python 3兼容。 问题答案: 你需要解码bytes对象以产生一个字符串: