time.strptime () – аргумент 0 должен быть str, а не байтами

Очевидно, я уже знаю, что strftime и strptime не любят строки байтов в качестве параметров, однако я здесь в рассоле, потому что мне нужно читать содержимое файла, в котором хранятся различные кодировки символов, и мне нужно обрабатывать их всех, и отправить часть времени каждой строки в этом текстовом файле в strptime() .

Быстрое исправление заключалось бы в том, чтобы разбить строку, убедившись, что время просто содержит числа и тире, но возможно ли каким-то образом передать объект байта, не пытаясь определить кодировку в strptime() ?

 with open('file.txt', 'rb') as fh: for line in fh: time.strptime(line, '%Y-%m-%d ...') 

Это, очевидно, потерпит неудачу. Я думал о том, чтобы делать repr(line) но это приводит к тому, что строка будет выглядеть как b'2014-01-07 ...' , которую я мог бы удалить.

2 Solutions collect form web for “time.strptime () – аргумент 0 должен быть str, а не байтами”

line является байтовым, потому что вы открыли файл в двоичном режиме. Вам нужно будет декодировать строку; если это строка даты, соответствующая шаблону, вы можете просто использовать ASCII:

  time.strptime(line.decode('ascii'), '%Y-%m-%d ...') 

Вы можете добавить аргумент 'ignore' чтобы игнорировать что-либо не-ASCII, но вероятность того, что строка не будет соответствовать вашему формату даты, в любом случае.

Обратите внимание, что вы не можете передать значение, содержащее в нем больше, чем синтаксический анализ; строка с другим текстом на ней, явно не охваченная strptime() , не будет работать, какой бы кодек вы ни использовали.

И если ваш вход действительно сильно меняется в кодеках, вам все равно придется ловить исключения так или иначе.

Помимо UTF-16 или UTF-32, я бы не ожидал, что вы столкнетесь с любыми кодеками, использующими разные байты для арабских цифр. Если ваш вход действительно смешивает многобайтовые и однобайтовые кодеки в одном файле, у вас есть большая проблема с вашей стороны, ни в коем случае, потому что обработка новой строки будет сильно испорчена.

Вы должны декодировать данные при чтении файла:

 import codecs with codecs.open('file.txt', encoding='utf8') as fh: for line in fh: time.strptime(line, '%Y-%m-%d ...') 

Всегда лучше расшифровывать ваш контент как можно скорее.

Также проверьте http://docs.python.org/2/library/codecs.html#codecs.open

  • Python Undo Unicode Question
  • Тарабарщина из urlopen
  • Почему этот HTML-шаблон на jinja2 / python создает ошибку 'u ()' tuple при замене строк?
  • Устройство urllib2, которое не соответствует кодировке
  • Преобразование из utf-16 в utf-8 в Python 3
  • Python - Как отправить сообщение utf-8?
  • Python Unicode UnicodeEncodeError
  • codecs.open (utf-8) не читает обычный ASCII-файл
  • Запись строки UTF-8 в MySQL с помощью Python
  • BeautifulSoup "(" utf-8 ")
  • Проблема UTF-8 в python при чтении символов
  • Python - лучший язык программирования в мире.