【发布时间】:2020-12-01 22:46:41
【问题描述】:
我有
b'path\n/sync/u/0/i/bv\nurl_ids_md5\n\xd9\xdd\x80fF>(\xf4?\xcc\x86c|\xd2\xd3\xf0\nargcount\n2\nstart_time\n1605232804\narg.c\n10\narg.hl\n11\n'
其中包含以下元素:
1) "path"
2) "/sync/u/0/i/bv"
3) "url_ids_md5"
4) "\xd9\xdd\x80fF>(\xf4?\xcc\x86c|\xd2\xd3\xf0"
5) "argcount"
6) "2"
7) "start_time"
8) "1605232804"
9) "arg.c"
10) "10"
11) "arg.hl"
12) "11"
我正在尝试将其分解为一个列表,其中包含由“\n”分隔的元素。但是,会出现几种情况:
我们把有问题的字符串称为 s。
如果我天真地执行 s.split("\n"),那当然是行不通的,我会遇到以下错误:
TypeError: a bytes-like object is required, not 'str'
然后我在尝试拆分之前 decode():s.decode().split("\n")。这样做的问题是我有一个 md5 编码的组件作为 s 的一部分,它与 decode() 的默认 utf-8 解码不兼容。
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd9 in position 32: invalid continuation byte
接下来(而不是 decode())我尝试将 str() 应用于 s。我得到以下信息:
b'path\n/sync/u/0/i/bv\nurl_ids_md5\n\xd9\xdd\x80fF>(\xf4?\xcc\x86c|\xd2\xd3\xf0\nargcount\n2\nstart_time\n1605232804\narg.c\n10\narg.hl\n11\n'
(请注意,它仍然是 utf-8 编码的(我认为),前面的 b' 证明了这一点。) 有趣的是,在上面做 .split("\n") 的结果如下:
["b'path\\n/sync/u/0/i/bv\\nurl_ids_md5\\n\\xd9\\xdd\\x80fF>(\\xf4?\\xcc\\x86c|\\xd2\\xd3\\xf0\\nargcount\\n2\\nstart_time\\n1605232804\\narg.c\\n10\\narg.hl\\n11\\n'"]
这对我来说本身没有意义。 (但请注意,它允许我现在执行 .split(),而不是我的原始字符串/第一个示例)
如何正确拆分字符串?
【问题讨论】:
标签: python python-3.x string split