#python
#питон
Вопрос:
У меня есть файл, в котором в любом случае слова сохраняются в двоичном представлении в стиле python:
file = ["b'first'", "b'second'"]
Возможно ли извлечь это и сохранить битовое представление в переменную (для выполнения декодирования) без изменения значений между одинарными кавычками, а затем кодировать и декодировать строку?
Комментарии:
1. Он уже находится в переменной, что вы подразумеваете под «сохранить его в переменной»?
2. Вы можете использовать
ast.literal_eval()
для декодирования строк в байтовые строки.3. переменная «Сохранить в» немного вводила в заблуждение, мне нужно байтовое представление, потому что мне нужно декодировать его в utf-8. ast звучит как хорошее решение.
Ответ №1:
да
gt;gt;gt; file = ["b'first'", "b'second'"] gt;gt;gt; for it in file: ... print(ast.literal_eval(it)) ... b'first' b'second'
также вы можете применить map
функцию
import ast file = ["b'first'", "b'second'"] file_2=map(ast.literal_eval,file) #lt;map object at 0x0000000002E8EFA0gt; file_3=list(file_2) #[b'first', b'second']
Комментарии:
1. разве eval не является проблемой безопасности, особенно в данном случае, потому что чтение из простого файла?
2. Использовать
ast.literal_eval()
, нетeval()
.
Ответ №2:
Просто используйте нарезку:
file = ["b'first'", "b'second'"] bytestrings = [bytes(x[2:-1], 'ascii') for x in file]
Комментарии:
1. Это также был подход, который я имел в виду, но я отложил этот подход по очевидной причине жесткого кодирования. Это может сработать для моей проблемы в 99,9% случаев, но я всегда буду иметь в виду эту проблему.