将包含 "b'…'" 的字符串转换为 unicode
Convert string containing "b'…'" to unicode
我现在尝试几个小时来找到解决这个问题的方法。
我需要读入一个生成的 CSV 文件,该文件具有如下格式的 headers 列:
"b'Device Name' (b'')"
甚至
"b'Bezugsz\xc3\xa4hler' (b'Wh')"
我想将这些字符串转换为 Unicode。但是,直到现在我都不走运。到目前为止,我发现的所有带有编码或解码的示例都没有指向有用的方向。我需要摆脱 b'…'
部分以及 \x
转义。
我希望这里有人能提供一些有用的信息。 :)
编辑:根据要求得到所需的输出:
"Device Name ()"
"Bezugszähler (Wh)"
第一种情况用replace()很容易实现。但是我正在寻找第二种情况的解决方案,那么自然会包含第一种情况。
我尝试了 ast.literal_eval() 的解决方案,但这在括号中令人窒息。 .encode().decode() 的解决方案也没有按预期工作。
这里有一个快速而肮脏的方法:
- 使用正则表达式查找伪字节
- 使用
ast.literal_eval()
将它们转换为实际字节
- 将字节解码为字符串
- 重新插入模板
headers = [
"b'Device Name' (b'')",
"b'Bezugsz\xc3\xa4hler' (b'Wh')"]
# ---
import ast
import re
def f(string):
faux_bytes = re.findall(r"b'.*?'", string)
real_bytes = [ast.literal_eval(f) for f in faux_bytes]
decoded = [s.decode() for s in real_bytes]
return '{} ({})'.format(*decoded)
result = [f(h) for h in headers]
print(result)
输出:
['Device Name ()', 'Bezugszähler (Wh)']
我现在尝试几个小时来找到解决这个问题的方法。 我需要读入一个生成的 CSV 文件,该文件具有如下格式的 headers 列:
"b'Device Name' (b'')"
甚至
"b'Bezugsz\xc3\xa4hler' (b'Wh')"
我想将这些字符串转换为 Unicode。但是,直到现在我都不走运。到目前为止,我发现的所有带有编码或解码的示例都没有指向有用的方向。我需要摆脱 b'…'
部分以及 \x
转义。
我希望这里有人能提供一些有用的信息。 :)
编辑:根据要求得到所需的输出:
"Device Name ()"
"Bezugszähler (Wh)"
第一种情况用replace()很容易实现。但是我正在寻找第二种情况的解决方案,那么自然会包含第一种情况。
我尝试了 ast.literal_eval() 的解决方案,但这在括号中令人窒息。 .encode().decode() 的解决方案也没有按预期工作。
这里有一个快速而肮脏的方法:
- 使用正则表达式查找伪字节
- 使用
ast.literal_eval()
将它们转换为实际字节 - 将字节解码为字符串
- 重新插入模板
headers = [
"b'Device Name' (b'')",
"b'Bezugsz\xc3\xa4hler' (b'Wh')"]
# ---
import ast
import re
def f(string):
faux_bytes = re.findall(r"b'.*?'", string)
real_bytes = [ast.literal_eval(f) for f in faux_bytes]
decoded = [s.decode() for s in real_bytes]
return '{} ({})'.format(*decoded)
result = [f(h) for h in headers]
print(result)
输出:
['Device Name ()', 'Bezugszähler (Wh)']