将脚本升级到Python 3-\ r \ n和文本二进制模式

时间:2018-06-22 01:06:23

标签: python python-3.x python-2.7 newline

真正为基本的东西而苦苦挣扎。我正在寻找\ n没有倒数\ r的实例(即\ r \ n很好x \ n不好并且会)。

我很欣赏这是因为python 2对rb的管理方式不同,但是无法确定python 3中识别\ r的等效功能或方式。

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
        this.setTurnScreenOn(true);
    } else {
        final Window window = getWindow();
        window.addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
    }

2 个答案:

答案 0 :(得分:1)

如果您要查找换行符/换行符(\n)字符的位置,而不要使用回车符(\r),则可以使用负数 向后看 断言正则表达式。

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

有两件事要注意。

  1. contentbytes实例;当您以“ rb”模式读取文件时,将获得字节。
  2. pattern必须是字节实例,因为要搜索的序列是字节实例。
  3. 如果括号((?<!\r)\n)后面的字符前面没有\n,则模式\r匹配。有关完整说明,请参见re documentation

答案 1 :(得分:1)

Python 3明确区分了原始字节字符串和utf-8字符串。 content[line-1]返回一个数字,可能是0-255-字节,并且您正在尝试将其与字符串'\r'进行匹配。我同意可以进行转换,但是Python是强类型的,因此无论整数表示什么字符,这都将始终失败。要获取与byte相对应的\r号,请使用:

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

,并类似地使用字节字符串生成迭代器:

newLinePos = [m.start() for m in re.finditer(b'\n', content)]