Python избавиться от байтов b »
Я получаю байты: b’\x00′ Как мне избавиться от этого b» ? Скажем, я хочу сохранить байты в списке, а затем снова сохранить этот список как одно и то же изображение. Как я могу продолжить? Спасибо!
mishik 09 июнь 2013, в 21:19
Поделиться
b означает, что это байт . вы не хотите от него избавляться .
Ben 09 июнь 2013, в 19:04
byte.decode(‘ascii’) если вы знаете, что байт представляет символ ASCII
Pithikos 20 март 2015, в 16:57
@Pithikos bytes.decode (‘ascii’), чтобы исправить это.
Doruk 27 нояб. 2017, в 18:28
Показать ещё 1 комментарий
Поделиться:
7 ответов
Вы можете использовать функцию bytes.decode, если вам действительно нужно «избавиться от b»: http://docs.python.org/3.3/library/stdtypes.html#bytes.decode
Но, похоже, из вашего кода вам действительно не нужно это делать, вам действительно нужно работать с байтами.
mishik 09 июнь 2013, в 20:15
Поделиться
Я попытался декодировать (‘UTF-8’), и это не сработало
user1952219 09 июнь 2013, в 19:12
Пожалуйста, покажите код.
mishik 09 июнь 2013, в 19:13
b «. » — это всего лишь обозначение байтовых строк на питоне, оно на самом деле не существует, оно только печатается. Это вызывает некоторые реальные проблемы?
jureslak 09 июнь 2013, в 20:58
Поделиться
Когда я сохраняю его в TXT, он сохраняет с помощью B »
user1952219 09 июнь 2013, в 19:12
Я вижу, вы сохраняете это как строку. Если это проблема, то str (byte) [1:] должен удалить ‘b’
jureslak 09 июнь 2013, в 19:13
что за [1:] меню?
user1952219 09 июнь 2013, в 19:16
это синтаксис среза питона. «string» [1:] принимает символ строки из индекса 1 до конца: он производит «tring». Смотрите документы по питону для получения дополнительных ссылок на нарезку 🙂
jureslak 09 июнь 2013, в 19:22
Показать ещё 2 комментария
b» — это только строковое представление данных, которое записывается, когда вы print его.
Использование decode не поможет вам здесь, потому что вам нужны только байты, а не символы, которые они представляют. Сокращение строкового представления поможет еще меньше, потому что тогда вы по-прежнему оставляете строку из нескольких бесполезных символов ( «\», «x» и т.д.), А не исходные байты.
Нет необходимости изменять строковое представление данных, поскольку данные все еще существуют. Просто используйте его вместо строки (т.е. Не используйте print ). Если вы хотите скопировать данные, вы можете просто:
data = file1.read(. ) . file2.write(data)
Если вы хотите вывести двоичные данные непосредственно из вашей программы, используйте sys.stdout.buffer :
import sys sys.stdout.buffer.write(data)
Убираем конкретные символы из строки
С поомщью str.replace мы можем менять какие-то символы на другие. Если мы просто хотим убрать какие-то символы, тогда просто заменяем их на пустую строку. str.replace() будет применять замену ко всем найденным совподениям.
s="Hello$ Python3$" s1=s.replace("$", "") print (s1) # Результат: Hello Python3Если мы можем указать ограничение для количества совпадений, чтобы не убирать все символы.
s="Hello$ Python3$" s1=s.replace("$", "", 1) print (s1) # Результат: Hello Python3$С помощью ' re.sub '
re. sub (pattern, repl, string, count=0, flags=0)
Возвращает строку, полученную путем замены крайних левых неперекрывающихся
совпадений с шаблоном в строке на значение repl. Если совпадения с шаблоном
не найдены, возвращается неизмененная строка
— Из документации Python'а
Если мы хотим убрать символы, то просто заменяем совпадения на пустую строку.
s="Hello$@& Python3$" import re s1=re.sub("[$|@|&]","",s) print (s1) # Результат: Hello Python3
- Заменяемый шаблон → “[ $ | @ | & ]”
- [ ] используется для определения множества
- $ | @ | & → будет искать $ или @ или &
- Заменяем на пустую строку
- Если вышеуказанные символы заменяются найдены, то они заменяются на пустую строку
Убрать все символы, кроме букв
С помощью 'isalpha()'

isalpha() используется для того, чтобы проверять, состоит ли строка только из букв. Возвращает True если является буквой. Мы будем проходить по каждому символу строки и проверять является ли он буквой.
Пример
s="Hello$@ Python3&" s1="".join(c for c in s if c.isalpha()) print (s1) # Результат: HelloPython(c for c in s if c.isalpha())
Перед нами объект генератор, содержащий все буквы из строки:
s1=””.join(c for c in s if c.isalpha())””.join будет соединять все символы в одну строку.
С помощью 'filter()'
s = "Hello$@ Python3&" f = filter(str.isalpha, s) s1 = "".join(f) print(s1)f = filter(str.isalpha, s)
Функция filter() будет применять str.isalpha метод для каждого элемента строки, и если получаем истину , то мы возвращаем элемент. В противном случае - пропускаем.
Функция filter() вернет итератор, содержащий все буквы переданной строки, а join() будем "склеиват" все элементы друг с другом.
С помощью 're.sub()'
s = "Hello$@ Python3$" import re s1 = re.sub("[^A-Za-z]", "", s) print (s1) # Результат: HelloPythonРассмотрим s1 = re.sub(“[^A-Za-z]”, ””, s)
- “[ A-Za-z]”* → Ищет все символы, кроме букв. Если в начале множества указать * , тогда к шаблону будут подходить все те символы, которые НЕ указаны в множестве. (для русских слов используйте [^А-Яа-я] - прим. ред.)
- Все символы, удовлетворяющие шаблону будут заменены на пустую строку.
- Все символы, кроме букв, будут убраны.
Убрать все символы, кроме букв и чисел
С помощью 'isalnum()'

isalnum() используется, когда мы хотим определить состоит строка только из чисел или букв.
Пройдемся по каждому символу строки, что-бы выявить нужные символы.
s = "Hello$@ Python3&" s1 = "".join(c for c in s if c.isalnum()) print(s1) # Результат: HelloPython3С помощью 're.sub()'
s = "Hello$@ Python3&_" import re s1 = re.sub("[^A-Za-z0-9]", "", s) print(s1) # Результат: HelloPython3
- “[^A-Za-z0–9]” → Этот шаблон будет искать все символы, кроме букв и цифр.
- Все найденные символы будут заменены на пустую строку
- Все символы, кроме букв и цифры убраны.
Убрать все числа из строки, с помощью регулярных выражений
С помощью 're.sub()'

s = "Hello347 Python3$" import re s1 = re.sub("[0-9]", "", s) print(s1) # Результат: Hello Python$
- [0-9] - цифры от 0 до 9
- re.sub(“[0–9]”, ””, s) - если есть совпадения, заменяем на пустую строку
Убираем все символы из строки кроме цифр
С помощью 'isdecimal()'
isdecimal() возвращает истину, если все символы строки являются цифрами, в противном случае возвращается ложь.

s = "1-2$3%4 5a" s1 = "".join(c for c in s if c.isdecimal()) print(s1) # Результат: 12345Пороходим по каждому символу строки и проверяем и является ли он цифрой. "".join() соединяет все элементы.
С помощью 're.sub()'
s = "1-2$3%4 5a" import re s1 = re.sub("[^0-9]", "", s) print(s1) # Результат: 12345Рассмотрим s1 = re.sub(“[^0–9]”, ””, s)
- [^0-9] будет искать все символы кроме от 0 до 9
- re.sub(“[^0–9]”, ””, s) все символы кроме цифр будут заменены на пустую строку.
С помощью 'filter()'
s = "1-2$3%4 5a" f = filter(str.isdecimal, s) s1 = "".join(f) print(s1) # Результат: 12345Рассмотрим f = filter(str.isdecimal, s)
Функция filter() будет выполнять str.isdecimal метод для каждого символа, если он возвращает истину, то добовляет его в генератор. Затем генератор распаковывается в готовую строку с помощью метода join() .
Примечание
Строки в Python являются неизменяемыми объектами, поэтому все вышеуказаные методы убирает символы из данной строки и возвращает новую, они не меняют состояние оригинальной строки.
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.
По статье задано0 вопрос(ов)
Подписка на обсуждение 4
Подписка на раздел 73Вам это нравится? Поделитесь в социальных сетях!
Конвертация между байтами и строками#
Избежать работы с байтами нельзя. Например, при работе с сетью или файловой системой, чаще всего, результат возвращается в байтах.
Соответственно, надо знать, как выполнять преобразование байтов в строку и наоборот. Для этого и нужна кодировка.
Кодировку можно представлять как ключ шифрования, который указывает:
- как «зашифровать» строку в байты (str -> bytes). Используется метод encode (похож на encrypt)
- как «расшифровать» байты в строку (bytes -> str). Используется метод decode (похож на decrypt)
Эта аналогия позволяет понять, что преобразования строка-байты и байты-строка должны использовать одинаковую кодировку.
encode, decode#
Для преобразования строки в байты используется метод encode:
In [1]: hi = 'привет' In [2]: hi.encode('utf-8') Out[2]: b'\xd0\xbf\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82' In [3]: hi_bytes = hi.encode('utf-8')
Чтобы получить строку из байт, используется метод decode:
In [4]: hi_bytes Out[4]: b'\xd0\xbf\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82' In [5]: hi_bytes.decode('utf-8') Out[5]: 'привет'
str.encode, bytes.decode#
Метод encode есть также в классе str (как и другие методы работы со строками):
In [6]: hi Out[6]: 'привет' In [7]: str.encode(hi, encoding='utf-8') Out[7]: b'\xd0\xbf\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82'
А метод decode есть у класса bytes (как и другие методы):
In [8]: hi_bytes Out[8]: b'\xd0\xbf\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82' In [9]: bytes.decode(hi_bytes, encoding='utf-8') Out[9]: 'привет'
В этих методах кодировка может указываться как ключевой аргумент (примеры выше) или как позиционный:
In [10]: hi_bytes Out[10]: b'\xd0\xbf\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82' In [11]: bytes.decode(hi_bytes, 'utf-8') Out[11]: 'привет'
Как работать с Юникодом и байтами#
Есть очень простое правило, придерживаясь которого, можно избежать, как минимум, части проблем. Оно называется «Юникод-сэндвич»:
- байты, которые программа считывает, надо как можно раньше преобразовать в Юникод (строку)
- внутри программы работать с Юникод
- Юникод надо преобразовать в байты как можно позже, перед передачей
Как удалить пробелы из строки в Python
Есть несколько способов удалить пробелы из строки в Python. Python String неизменяем, поэтому мы не можем изменить его значение. Любая функция, которая управляет строковым значением, возвращает новую строку, и мы должны явно назначить ее строке, иначе строковое значение не изменится.
Допустим, у нас есть пример строки, определенной как:
s = ' Hello World From Pankaj \t\n\r\tHi There '
Эта строка имеет разные типы пробелов, а также символы новой строки.
Давайте посмотрим на различные функции для удаления пробелов.
strip()
Строковая функция strip() удаляет начальные и конечные пробелы.
>>> s.strip() 'Hello World From Pankaj \t\n\r\tHi There'
Если вы хотите удалить только начальные или конечные пробелы, используйте вместо них функцию lstrip() или rstrip().
replace()
Мы можем использовать replace(), чтобы удалить все пробелы из строки. Эта функция также удалит пробелы между словами.
>>> s.replace(" ", "") 'HelloWorldFromPankaj\t\n\r\tHiThere'
join() с split()
Если вы хотите избавиться от всех повторяющихся пробелов и символов новой строки, вы можете использовать функцию join() с функцией string split().
>>> " ".join(s.split()) 'Hello World From Pankaj Hi There'
translate()
Если вы хотите избавиться от всех пробелов, а также от символов новой строки, вы можете использовать строковую функцию translate().
>>> import string >>> s.translate() 'HelloWorldFromPankajHiThere'

Python удаляет пробелы из строки с помощью Regex
Мы также можем использовать регулярное выражение для поиска пробелов и их удаления с помощью функции re.sub().
import re s = ' Hello World From Pankaj \t\n\r\tHi There ' print('Remove all spaces using RegEx:\n', re.sub(r"\s+", "", s), sep='') # \s matches all white spaces print('Remove leading spaces using RegEx:\n', re.sub(r"^\s+", "", s), sep='') # ^ matches start print('Remove trailing spaces using RegEx:\n', re.sub(r"\s+$", "", s), sep='') # $ matches end print('Remove leading and trailing spaces using RegEx:\n', re.sub(r"^\s+|\s+$", "", s), sep='') # | for OR condition
Remove all spaces using RegEx: HelloWorldFromPankajHiThere Remove leading spaces using RegEx: Hello World From Pankaj Hi There Remove trailing spaces using RegEx: Hello World From Pankaj Hi There Remove leading and trailing spaces using RegEx: Hello World From Pankaj Hi There



