Преобразовать 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()
используется здесь только для восстановления имен каталогов, и вы должны воссоздать их правильно; другими словами, они не должны были быть созданы таким образом для начала.