Обновление скриптов до Python 3 - r n и текстовый двоичный режим

На самом деле борется с чем-то, что должно быть довольно простым. Я ищу, чтобы идентифицировать экземпляры, где import re import sys импортирует время с открытым ( «4 - raw.txt» , «rb» ) в качестве content_file : content = content_file . read () newLinePos = [ m . start () для m в re . finditer ( ' n' , content )] для строки в newLinePos : если ( содержание [ строка - 1 ]) ! = ' г' : печать ( магнезии ( содержание [ линия - 20 : линия ])) печать ( "конец" ) время . sleep ( 1000 ) не имеет обратного содержимого [line-1] (т. е. « r'byte is good x n - это плохо и будет).

Я понимаю, что это потому, что python 2 управлял «rb» по-разному, но не мог выработать эквивалентную функцию или способ идентификации r в python 3.

(content[line-1]) != ord('
')

python,python-3.x,python-2.7,newline,

3

Ответов: 2


1 принят

Python 3 делает четкое различие между raw newLinePos = [ m . start () для m в re . finditer ( b ' n' , content )] и строка utf-8. возвращает число, возможно 0-255 - байт, и вы пытаетесь сопоставить его с строкой . Я согласен, возможно, можно сделать преобразование, но Python строго типизирован, так что это всегда будет терпеть неудачу, независимо от того, какой символ представляет целое. Чтобы получить номер, соответствующий использованию: byte

>>> lines = ['foo', 'ba
r', 'baz', 'quux']
>>> content = '
'.join(lines).encode('utf-8')
>>> content
b'foo
ba
r
baz
quux'
>>> pattern = b'(?<!
)
'
>>> newLinePos = [m.start() for m in re.finditer(pattern, content)]
>>> newLinePos
[7]
>>> content[5:8]
b'ba
'

и аналогичным образом используйте строку содержимого для вашего поколения итератора:

bytes

1

Если вы хотите найти расположение символов линии / новой строки ( ), которым не предшествует возврат каретки ( ), вы можете использовать регулярное выражение утверждения negative lookbehind .

pattern

Есть несколько вещей, чтобы отметить.

  1. (?<! ) является bytesэкземпляром; когда вы читаете из файла в режиме «rb», вы получите байты.
  2. должен быть экземпляром байта, потому что поиск последовательности является экземпляром байтов.
  3. Шаблон соответствует, если символу, указанному в круглых скобках ( ), не предшествует символ . Подробное описание см. В документации по документации .
питон, питон-3.x, питон-2,7, символ новой строки,
Похожие вопросы