Поэтому я пытаюсь добавить строки двоичных файлов в список, но вместо этого я добавляю каждый отдельный символ. Я новичок в python, поэтому я не совсем уверен, как это сделать сам (также при получении строк мне нужно игнорировать пробелы между каждой строкой двоичного кода)
str_msg = "This is a message!"
final = ' '.join(format(ord(x), 'b') for x in str_msg)
print(final)
который дает:
1010100 1101000 1101001 1110011 100000 1101001 1110011 100000 1100001 100000 1101101 1100101 1110011 1110011 1100001 1100111 1100101 100001
но затем я пытаюсь создать список таким образом:
binlist = []
for value in final:
binlist.append(value)
print(binlist)
Я получил:
['1', '0', '1', '0', '1', '0', '0', ' ', '1', '1', '0', '1', '0', '0', '0', ' ', '1', '1', '0', '1', '0', '0', '1', ' ', '1', '1', '1', '0', '0', '1', '1', ' ', '1', '0', '0', '0', '0', '0', ' ', '1', '1', '0', '1', '0', '0', '1', ' ', '1', '1', '1', '0', '0', '1', '1', ' ', '1', '0', '0', '0', '0', '0', ' ', '1', '1', '0', '0', '0', '0', '1', ' ', '1', '0', '0', '0', '0', '0', ' ', '1', '1', '0', '1', '1', '0', '1', ' ', '1', '1', '0', '0', '1', '0', '1', ' ', '1', '1', '1', '0', '0', '1', '1', ' ', '1', '1', '1', '0', '0', '1', '1', ' ', '1', '1', '0', '0', '0', '0', '1', ' ', '1', '1', '0', '0', '1', '1', '1', ' ', '1', '1', '0', '0', '1', '0', '1', ' ', '1', '0', '0', '0', '0', '1']
Выражение:
' '.join(format(ord(x), 'b') for x in str_msg)
использует выражение генератора для str_msg
каждого символа в строке: str_msg
преобразуется в его значение ASCII, представленное в двоичном формате, которое затем передается в метод .join
строки ' '
(пробел). В результате вы получаете строку двоичного представления этой строки.
Из звуков этого вам нужен list
строк, содержащих двоичное представление каждого символа.
Это может быть достигнуто с помощью понимания списка, которое имеет тот же синтаксис, что и выражение генератора, но использует квадратные скобки:
[format(ord(x), 'b') for x in str_msg]
Как сказано выше:
str_msg = "This is a message!"
final = ' '.join(format(ord(x), 'b') for x in str_msg)
print(final.split())
выход:
['1010100', '1101000', '1101001', '1110011', '100000', '1101001', '1110011', '100000', '1100001', '100000', '1101101', '1100101', '1110011', '1110011', '1100001', '1100111', '1100101', '100001']
str_msg = [format(ord(ch),'b') for ch in "this is a message"]
print(str_msg)
выход
['1110100', '1101000', '1101001', '1110011', '100000', '1101001', '1110011', '100000', '1100001', '100000', '1101101', '1100101', '1110011', '1110011', '1100001', '1100111', '1100101']
str_msg = list(map(lambda x: format(ord(x), 'b'), 'this is a message'))
print(str_msg)
выход
['1110100', '1101000', '1101001', '1110011', '100000', '1101001', '1110011', '100000', '1100001', '100000', '1101101', '1100101', '1110011', '1110011', '1100001', '1100111', '1100101']
Вы просто хотите разбить строку пробелами. По вашей конечной переменной,
'1010100 1101000 1101001 1110011 100000 1101001 1110011 100000 1100001 100000 1101101 1100101 1110011 1110011 1100001 1100111 1100101 100001'
do, final = final.split()
и вы получите свой список
['1010100', '1101000', '1101001', '1110011', '100000', '1101001', '1110011', '100000', '1100001', '100000', '1101101', '1100101', '1110011', '1110011', '1100001', '1100111', '1100101', '100001']
Поэтому, хотя все ответы, которые я получил, являются vaild, я решил принять ответ @Joe Iddon, так как это ответ, который дает мне самый оптимальный код (т.е. самый короткий).
Спасибо всем, кто помог с вопросом!
final = [format(ord(x), 'b') for x in str_msg]
? (вы также можете сделать этот08b
(или аналогичный), чтобы при необходимости форматирование08b
согласованным)