Преобразовать listdir () вернуться к байту для декодирования - PullRequest
0 голосов
/ 05 июня 2018

У меня есть список dir с именем, закодированным в '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, но все еще не работает.

Спасибо.

1 Ответ

0 голосов
/ 05 июня 2018

Вы использовали строковое представление bytes объектов в качестве имени ваших каталогов вместо создания каталогов с использованием закодированной строки байтов в качестве имени.Чтобы отменить добычу, вы можете в этом конкретном случае использовать ast.literal_eval() для оценки строкового представления, а затем декодировать получившийся объект bytes:

import os
import ast

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

Обратите внимание, что ast.literal_eval()используется здесь только для восстановления имен каталогов, и вы должны воссоздать их правильно;другими словами, они не должны были быть созданы таким образом для начала.

...