Преобразовать listdir() вернуться к байту для декодирования

У меня есть список 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 ответ

Решение

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

import os
import ast

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

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

Другие вопросы по тегам