为了账号安全,请及时绑定邮箱和手机立即绑定

在每个逗号(例如,导入文件1,文件2,文件3)之后放置空格

在每个逗号(例如,导入文件1,文件2,文件3)之后放置空格

临摹微笑 2021-04-01 10:11:28
真正挣扎的东西应该是非常基本的。我正在寻找\ n没有倒数\ r的实例(即\ r \ n好x \ n不好并且会)。我很欣赏这是因为python 2对rb的管理方式不同,但无法确定python 3中识别\ r的等效功能或方式。import reimport sysimport timewith open('4 - raw.txt', 'rb') as content_file:    content = content_file.read()newLinePos = [m.start() for m in re.finditer('\n', content)]for line in newLinePos:    if (content[line-1]) != '\r':        print (repr(content[line-20:line]))print ("end")time.sleep(1000)
查看完整描述

2 回答

?
智慧大石

TA贡献1946条经验 获得超3个赞

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)]


查看完整回答
反对 回复 2021-04-13
?
qq_笑_17

TA贡献1818条经验 获得超7个赞

如果你想找到换行/换行的位置(\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'

有几件事要注意。


content是一个bytes实例;当您以“ rb”模式读取文件时,将获得字节。

pattern 必须是一个字节实例,因为要搜索的序列是一个字节实例。

(?<!\r)\n如果括号(\n)后面的字符前面没有字符,则该模式匹配\r。有关完整说明,请参见re文档。


查看完整回答
反对 回复 2021-04-13
  • 2 回答
  • 0 关注
  • 151 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号