Python3在编码时不分割字符串

2024-09-28 22:26:05 发布

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

以下是片段:

for eachLine in content.splitlines(True):
    entity = str(eachLine.encode("utf-8"))[1:]
    splitResa = entity.split('\t')
    print(entity)
    print(splitResa)

基本上我得到的结果是:

^{pr2}$

但是在空闲状态下,一切正常:

>>> '<!ENTITY DOCUMENT_STATUS\t\t\t\t\t"draft">\n'.split('\t')
['<!ENTITY DOCUMENT_STATUS', '', '', '', '', '"draft">\n']

不知道为什么。我也尝试过答案: splitting a string based on tab in the file 但它仍然有同样的行为。问题是什么?在


Tags: intrueforstatuscontentdocumentsplitentity
2条回答

您产生了一个bytes表示;您在这里损坏了repr()调试输出。任何不可打印的字符或特殊字符都将被它们的转义序列替换。您生成的输出在字符串中没有制表符,它包含两个字符的序列\和{}:

>>> '\t'
'\t'
>>> '\t'.encode('utf8')
b'\t'
>>> str('\t'.encode('utf8'))
"b'\\t'"
>>> str('\t'.encode('utf8'))[1:]
"'\\t'"
>>> str('\t'.encode('utf8'))[1:][1:-1]
'\\t'
>>> len(str('\t'.encode('utf8'))[1:][1:-1])
2

我不清楚为什么首先要将文本编码成字节,然后再转换回字符串。一般来说,你不想那样做。在

在IDLE中,您并没有生成这样混乱的输出;您只是有一个带有实际制表符的常规字符串,因此对这些制表符进行拆分就可以了。我唯一的建议是不要在这里编码到字节。在

看起来eachLine是一个原始字符串。在

>>> r'<!ENTITY DOCUMENT_STATUS\t\t\t\t\t"draft">\n'.split('\t')
['<!ENTITY DOCUMENT_STATUS\\t\\t\\t\\t\\t"draft">\\n']

所以,您应该使用一个原始的\tr'\t')来分割它,如下所示

^{pr2}$

或者使用正确转义的\t'\\t'),如下所示

>>> r'<!ENTITY DOCUMENT_STATUS\t\t\t\t\t"draft">\n'.split('\\t')
['<!ENTITY DOCUMENT_STATUS', '', '', '', '', '"draft">\\n']

相关问题 更多 >