将 listdir() return 转换为字节进行解码

Convert listdir() return to byte for decoding

我有一个目录列表,名称编码为 'gbk',例如:

dirs
  |- b'\xb6\xb0'/
  |- b'\xc1\xb1'/
  |- b'\xc9\xdd'/

但是,当我使用 os.listdir() 时,是 return 一个 str 列表,如下所示:

["b'\xb6\xb0'", "b'\xc1\xb1'", "b'\xc9\xdd'"]

如何将字符串转换为字节并对其进行解码以获得原始字符?我试过 str.encode.decode 但还是不行。

谢谢。

您已使用 string representation of bytes objects as the name of your directories, instead of creating directories using the encoded byte string as the name. To undo the plunder you could in this particular case use ast.literal_eval() 评估字符串表示,然后解码生成的 bytes 对象:

import os
import ast

dirs = [ast.literal_eval(d).decode('gbk') for d in os.listdir(...)]

请注意,此处使用ast.literal_eval()只是为了恢复目录名,您应该重新创建它们;换句话说,它们一开始就不应该以这种方式创建。