python回车换行和回车结束的字符串_如何在python中存储或读取yaml中的文本回车和换行符...

博主在处理Python与YAML交互时遇到一个问题,即无法正确读取和存储YAML文件中的回车换行符。在尝试多种格式化方式如使用引号、二进制转义代码等后,最终发现通过在YAML文件中直接写入" "而非"\r\n"能正确读取并打印出回车换行符。

我整天都在与这个问题作斗争。我在网上也找不到答案。

我有一个yaml文档,它为我的消息/响应服务器存储了一些服务器配置,其中一个参数是“消息终结者”。您可以猜到,这就是我的服务器知道要查找的客户端发送的消息的消息终止器。\r\n

是telnet发送的默认值,因此我将其设置为默认值。

Yaml文件:global:

server_port: 7040

bound_ip: 0.0.0.0

message_terminator: \r\n

我要做的是将消息结束符值读取为实际的回车和换行符,或者将其从字符串表示形式转换为二进制转义代码:回车和换行符,而不是字符串表示形式“\r\n”

例如,如果我使用python:print('\r\n')

它打印回车和换行符,而不是字符。

但是,如果我从python中的yaml配置中读取值:print(config['global']['message_terminator'])

它打印出字符:\r\n

更改Yaml文档并添加引号,如:global:

server_port: 7040

bound_ip: 0.0.0.0

message_terminator: '\r\n'

以及global:

server_port: 7040

bound_ip: 0.0.0.0

message_terminator: b'\r\n'

甚至global:

server_port: 7040

bound_ip: 0.0.0.0

message_terminator: !!str \r\n

或者global:

server_port: 7040

bound_ip: 0.0.0.0

message_terminator: !!python/bytes b'\r\n'

没有效果。

当消息结束符打印出来时,它会打印字符。

当它通过网络发送到客户端时,它的字符。

我也尝试过这样的事情:print(bytes(config['global']['message_terminator'], 'utf-8').encode('unicode_escape'))

它仍然只是打印出字符。

如果我完全错了或者错过了什么大事,请原谅。

我还在计算字符串、字节、原始字符串等之间的全部区别。

欢迎任何建议或指点。

谢谢你的时间。

编辑@Jan:

什么时候在翻译程序中这样做才有效。我得到了一辆马车和一条新闻线。

不是角色。>>> text = """

... val: "hello\\n\\rnew line"

... """

>>> text

'\nval: "hello\\n\\rnew line"\n'

>>> print(text)

val: "hello\n\rnew line"

>>> import yaml

>>> data = yaml.load(text)

>>> data

{'val': 'hello\n\rnew line'}

>>> print(data['val'])

hello

new line

>>>

但在我的主代码中,当我从yaml文件加载时,它打印的不是实际的回车和换行符。

此python代码:TERM = config['global']['message_terminator']

print(TERM)

print(config['global']['message_terminator'])

print("netcmd server started on port", PORT)

在终端中打印:$ python3 netcmd.py

\r\n

\r\n

netcmd server started on port 7040

为了澄清,我想要回车和换行的动作,而不是字符表示。

编辑2:

问题解决了。在Jan更新之后,我从以下位置更改了yaml文件:global:

server_port: 7040

bound_ip: 0.0.0.0

message_terminator: "\\r\\n"

到global:

server_port: 7040

bound_ip: 0.0.0.0

message_terminator: "\r\n"

现在一切正常,python代码打印出一个实际的回车和从yaml文件读取的换行符。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值