Метод .strip () не удаляет загадочные пробельные символы

1

Я читаю некоторые данные, кодированные utf-8, из файла:

with open (filename, 'rb') as f:
    bytes= f.read(offset, length)
    #bytes is b'hello\x00\x00\x00\x00'
    text = bytes.decode('utf-8')
    #text is 'hello    '
    stripped_text = text.strip()
    #stripped_text is 'hello    '

Вы можете воссоздать это с помощью простой строки, например

thing = b'hello\x00\x00\x00\x00'.decode('utf8').strip()
print(thing)
#the output is 'hello    '

Как вы можете видеть, конечные нулевые символы не разделяются - я предполагаю, что это имеет какое-то отношение к '\ x00', которое не распознается.strip(), но везде, где я выгляжу, кажется, кажется, что это должно быть. Что дает? Как я могу удалить эти символы без необходимости делать что-то очень неуклюжие?

Я не мог найти сообщение, которое рассматривало бы эту проблему.

Теги:
string
strip

1 ответ

5
Лучший ответ

NUL не являются пробелами, поэтому strip() без аргументов не будет их лишать. Вместо этого вы должны использовать strip('\0'):

>>> 'hello\0\0\0\0'.strip('\0')
'hello'
  • 0
    Спасибо - это работает, но что за аргумент '\ 0'? строка, на которую вызывается strip (), называется 'hello'. '\ 0' интерпретируется как нулевой символ? Где в документах это?
  • 0
    @Nate: аргумент strip() - это набор символов для удаления. '\0' - это еще один способ обозначения '\x00' , символа NUL (первый использует восьмеричный escape, второй - шестнадцатеричный escape; см. Таблицы здесь для получения дополнительной информации).
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню