Python通过\n字符分割字符串
我有一个很长的字符串,其中包含很多 \n 转义序列,这些本来是用来表示换行的字符。为了让这个字符串按照它应该被阅读的方式来写,我想把这个字符串根据 \n 字符进行分割,然后把分割后的每个部分单独写出来,这样就能达到我想要的效果。但是,这样做并没有成功,它并没有正确地分割字符串。下面是我的代码,顺便说一下,我尝试过用 \n 和 \n 来进行分割,因为我想在字符串中找到字面上的 \n。谢谢大家的帮助。
shellreturn = subprocess.check_output(["C:\Python34\python",root.wgetdir + "\html2text.py", keyworddir + "\\" + item])
print(shellreturn)
shelllist = (str(shellreturn).split("\\n"))
2 个回答
0
shellreturn = subprocess.check_output(["C:\Python34\python",root.wgetdir + "\html2text.py", keyworddir + "\\" + item])
print(shellreturn)
shelllist = (str(shellreturn).split("\\n"))
这里提到的subprocess.check_output的参数处理得不太好,因为没有正确处理反斜杠(\)和没有使用os.path.join,这可能会引发问题,但这不是我们要讨论的重点。你在"\\"
和"\\n"
中确实处理了反斜杠。接下来我们来看看示例数据以及它会发生什么:
b"PMSI Direct \n262 Old New Brunswick Rd., Unit M \nPisca..."
b"
这个标记表示这是Python中的字节类型。这意味着反斜杠后的字符会被当作转义字符来处理,这和原始字符串(以r开头的字符串)不同。所以这里的行分隔符是"\n"
,而不是"\\n"
。如果你用"\\n"
来分割字符串,它是找不到任何匹配的,所以你得到的结果就是原始字符串,作为列表中的唯一项。这在找不到分隔符时是正确的分割方式。
还有一个额外的复杂性是,你似乎是在Windows系统上运行,那里使用的换行符不是'\n',而是'\r\n'。Python通常会在你打开文本文件时自动处理这个问题,所以你打开text_file
的方式也很重要。
6
这里你有的是 bytes
类型,而不是 str
类型。你需要把它解码成字符串,方法如下:
shellreturn = shellreturn.decode()
或者你也可以这样做:
shellreturn = str(shellreturn, 'utf-8')
解码之后,你可以使用 .split('\n')
来分割字符串,或者使用 .splitlines()
方法。