Python | Перетворення рядка в байти
Внутрішні перетворення, як завжди, досить популярні, але перетворення між рядком у байти є більш поширеним у наші дні через те, що для обробки файлів або машинного навчання (Pickle File) ми широко вимагаємо, щоб рядки були перетворені в байти. Давайте обговоримо певні способи, якими це можна зробити.
Спосіб №1: Використання bytes(str, enc) Рядок можна перетворити на байти за допомогою загальної функції bytes. Ця функція внутрішньо вказує на бібліотеку CPython, яка неявно викликає функцію кодування для перетворення рядка у вказане кодування.
Python3
# Python code to demonstrate> # convert string to byte> # Using bytes(str, enc)> # initializing string> test_string> => 'GFG> is> best'> # printing original string> print> ('The original string : '> +> str> (test_string))> # Using bytes(str, enc)> # convert string to byte> res> => bytes(test_string,> 'utf-8'> )> # print result> print> ('The byte converted string> is> : '> +> str> (res)> +> ',> type> : '> +> str> (> type> (res)))> |
Вихід:
The original string : GFG is best The byte converted string is : b'GFG is best', type :
Спосіб №2: Використання encode(enc) Найбільш рекомендований спосіб виконання цього конкретного завдання — використання функції кодування для здійснення перетворення, оскільки це зменшує кількість додаткових посилань на певну бібліотеку, ця функція безпосередньо викликає її.
Python3
# Python code to demonstrate> # convert string to byte> # Using encode(enc)> # initializing string> test_string> => 'GFG> is> best'> # printing original string> print> ('The original string : '> +> str> (test_string))> # Using encode(enc)> # convert string to byte> res> => test_string.encode(> 'utf-8'> )> # print result> print> ('The byte converted string> is> : '> +> str> (res)> +> ',> type> : '> +> str> (> type> (res)))> |
Вихід:
The original string : GFG is best The byte converted string is : b'GFG is best', type :
Спосіб №2: Використання memoryview()
У цьому прикладі ми викликаємо метод encode() для змінної my_string, щоб перетворити її на байти за допомогою кодування UTF-8. Потім ми передаємо отриманий об’єкт bytes у функцію memoryview(), яка повертає об’єкт представлення пам’яті, що забезпечує перегляд базових байтів.
Нарешті, ми викликаємо метод tobytes() в об’єкті перегляду пам’яті, щоб створити новий об’єкт bytes, що містить ті самі дані. Цей об’єкт bytes зберігається в змінній my_bytes і виводиться на консоль.
ПРИМІТКА: функція memoryview() корисна в ситуаціях, коли вам потрібно отримати доступ до базових байтів об’єкта без їх копіювання. Однак це може бути не найефективнішим підходом для простого перетворення рядків у байти, оскільки це передбачає додаткові витрати.
Python3
my_string> => 'Hello, world!'> #Define a string called my_string with the value 'Hello, world!'.> my_bytes> => memoryview(my_string.encode(> 'utf-8'> )).tobytes()> #Encode the string as bytes using the UTF-8 encoding by calling the encode() method on my_string and passing 'utf-8' as the argument. This will return a bytes object containing the encoded bytes.> #Convert the memoryview object of the bytes object to bytes using the tobytes() method. This creates a new bytes object that is a copy of the original bytes object.> #Print the resulting bytes object using the print() function.#> print> (my_bytes)> |
Вихід
b'Hello, world!'
часова складність: O(n),
просторова складність: O(n)
Спосіб №3: Використання методу binascii.unhexlify():
Алгоритм:
1.Імпортуйте модуль binascii
2. Ініціалізуйте рядок, що містить шістнадцяткове представлення байтів
3. Використовуйте метод unhexlify() модуля binascii для перетворення шістнадцяткового рядка в байти
4. Надрукуйте перетворені байти та їх тип.
Python3
import> binascii> # initializing string> test_string> => '4766472069732062657374'> # printing original string> print> (> 'The original string : '> +> str> (test_string))> # Using binascii.unhexlify()> # convert string to byte> res> => binascii.unhexlify(test_string)> # print result> print> (> 'The byte converted string is : '> +> str> (res)> +> ', type : '> +> str> (> type> (res)))> #This code is contributed by Jyothi pinjala> |
Вихід
The original string : 4766472069732062657374 The byte converted string is : b'GfG is best', type :
Часова складність:
Метод binascii.unhexlify() має часову складність O(n), де n — довжина вхідного рядка.
Усі інші операції в цьому коді мають часову складність O(1).
Тому загальна часова складність цього коду становить O(n).
Космічна складність:
Складність простору цього коду становить O(1), оскільки він використовує лише постійну кількість додаткового простору, незалежно від розміру вхідних даних.
Спосіб 5: використання методу struct.pack().
Поетапний підхід
Імпортуйте модуль struct у свій код.
Найкраще ініціалізувати рядок під назвою «test_string» зі значенням GFG.
Надрукуйте вихідний рядок за допомогою оператора print.
Використовуйте метод bytes(), щоб перетворити рядок у байти. Передайте методу кодування «test_string» і «utf-8» як параметри.
Використовуйте метод struct.pack(), щоб перетворити байти на двійкові дані. Передайте рядок формату «10s» і байти як параметри методу. Рядок формату «10s» вказує на те, що вхідні дані слід розглядати як рядок довжиною 10.
Збережіть результат у змінній res.
Надрукуйте перетворений рядок байтів разом із його типом за допомогою оператора print.
Python3
import> struct> # initializing string> test_string> => 'GFG is best'> # printing original string> print> (> 'The original string : '> +> str> (test_string))> # Using struct.pack()> # convert string to byte> res> => struct.pack(> '10s'> , bytes(test_string,> 'utf-8'> ))> # print result> print> (> 'The byte converted string is : '> +> str> (res)> +> ', type : '> +> str> (> type> (res)))> |
Вихід
The original string : GFG is best The byte converted string is : b'GFG is bes', type :
Часова складність. Часова складність методів bytes() і struct.pack() становить O(n), де n – довжина вхідного рядка.
Допоміжний простір: складність простору для методів bytes() і struct.pack() становить O(n), де n – довжина вхідного рядка.