【问题标题】:Convert listdir() return to byte for decoding将 listdir() 返回转换为字节进行解码
【发布时间】:2018-06-05 08:38:24
【问题描述】:

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

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

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

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

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

谢谢。

【问题讨论】:

  • 您的目录实际上命名为b'\xb6\xb0'吗?就像您在控制台等中检查目录一样,您会看到相同的列表。
  • 在终端中类似于b'\xc1\xf2'/

标签: python encoding listdir


【解决方案1】:

您已使用string representation of bytes objects 作为目录名称,而不是使用编码字节字符串作为名称创建目录。要撤消掠夺,您可以在这种特殊情况下使用ast.literal_eval() 来评估字符串表示,然后解码生成的bytes 对象:

import os
import ast

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

请注意ast.literal_eval()在这里仅用于恢复目录名称,您应该正确地重新创建它们;换句话说,它们一开始就不应该以这种方式创建。

【讨论】:

    猜你喜欢
    • 2022-12-09
    • 2021-11-04
    • 1970-01-01
    • 2018-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多