从字符串转换为字节时如何正确格式化

2024-05-20 18:44:13 发布

您现在位置:Python中文网/ 问答频道 /正文

在从字符串转换为字节时,是否有方法保持格式

例如:

string = "Hello \n my \n name \n is \n foo"

bites = bytes(string, 'utf-8')

并且我希望bites变量的格式与字符串的格式相同,在每个字符串后面都有新行\n


Tags: 方法字符串namehellostringbites字节bytes
3条回答

这是因为bytes的默认方法__str__方法的实现方式是将0x0A(换行符在ASCII中由0x0A编码)打印为\n

如果希望它作为换行符打印,可以通过以下方式实现自己的bytes类:

class MyBytes(bytes):
    def __str__(self):
        return self.decode()
string = "Hello \n my \n name \n is \n foo"
bites = MyBytes(string, 'utf-8')

那么如果你{};它给了你一条新的路线

您可能正在查找前缀为r的“原始字符串”

>>> print(r"my raw\nstring")
my raw\nstring
>>> print("my raw\nstring")
my raw
string

bytes对象与str对象不同

print方法的行为将因传递给它的对象而异,因为它从对象调用__str__方法。因此,对于bytes对象,它打印字符串而不转换特殊字符,如换行符到实际换行符

>>> print(bites)
b'Hello \n my \n name \n is \n foo'
>>> a = bites.__str__()
>>> a  # this is a string with newlines scaped
"b'Hello \\n my \\n name \\n is \\n foo'"
>>> isinstance(a, str)
True
>>> isinstance(bites, bytes)
True

如果要打印带有换行符的字节,最好的替代方法是将其转换为字符串

>>> a = bites.decode('utf-8')
>>> isinstance(a, str)
True
>>> a
'Hello \n my \n name \n is \n foo'
>>> print(a)
Hello
 my
 name
 is
 foo

相关问题 更多 >