文件读取和regex-Python
我读了一个文件,其中有一行:文件读取和regex-Python,python,regex,string,file,Python,Regex,String,File,我读了一个文件,其中有一行:Fixes:Saurabh喜欢python 我想删除上述行的修复:部分。我为此雇用了regex 但是下面的代码段返回的输出如下 Saurabh Likes python\r 我想知道\r来自哪里。我尝试了所有的剥离选项来删除它,比如rstrip(),lstrip(),等等,但都没有效果。谁能告诉我摆脱\r的方法吗 patternFixes ='\s*'+'Fixes'+':'+'\s*' matchFixes= re.search(patternFixes,line
Fixes:Saurabh喜欢python
我想删除上述行的修复:
部分。我为此雇用了regex
但是下面的代码段返回的输出如下
Saurabh Likes python\r
我想知道\r
来自哪里。我尝试了所有的剥离选项来删除它,比如rstrip()
,lstrip()
,等等,但都没有效果。谁能告诉我摆脱\r
的方法吗
patternFixes ='\s*'+'Fixes'+':'+'\s*'
matchFixes= re.search(patternFixes,line, re.IGNORECASE)
if matchFixes:
patternCompiled = re.compile(patternFixes)
line=patternCompiled.sub("", line)
#line=line.lstrip()
relevantInfo = relevantInfo+line
continue
提前谢谢!
-Saurabh您可能以二进制模式打开文件(
open(filename,“rb”)
或类似的方式)。如果您正在处理文本文件,请不要这样做
改用open(filename)
。现在,Python将自动将所有换行符规范化为\n
,而不考虑当前平台
另外,为什么不简单地patternFixes=r'\s*修复:\s*'
?为什么所有的+
es
然后,你做了很多不必要的事情,比如一遍又一遍地重新编译正则表达式
因此,我的建议(与您的代码做相同的事情(加上文件处理):
没有“\r”
>>> re.sub('\s*'+'Fixes'+':'+'\s*', '', 'Fixes: Saurabh Likes python')
'Saurabh Likes python'
再次没有“\r”
你能提供更多关于如何复制的细节吗
编辑也不能用您的代码复制
>>> line = 'Fixes: Saurabh Likes python'
>>> patternFixes ='\s*'+'Fixes'+':'+'\s*'
>>> matchFixes= re.search(patternFixes,line, re.IGNORECASE)
>>> if matchFixes:
... patternCompiled = re.compile(patternFixes)
... line=patternCompiled.sub("", line)
... print line
... line=line.lstrip()
... print line
...
Saurabh Likes python
Saurabh Likes python
>>>
清除
\r
的建议:
我想您已经使用open(filename)
打开了您的文件
如果省略模式,则除了
标准的fopen()值模式可以是'U'或'rU'。Python通常是
使用通用换行符支持构建;提供“U”将按如下方式打开文件
一个文本文件,但行可以由以下任何一项终止:
Unix线端约定'\n',Macintosh约定'\r',或
Windows约定“\r\n”。所有这些外部表示形式
被Python程序视为“\n”
因此,简而言之,请尝试使用'rU'
打开您的文件,看看\r
是否消失:
with open(filename, "rU") as f:
# do your stuff here.
...
\r
是否在输出中消失
当然,您的代码看起来相当笨拙,但其他人已经对这一部分进行了评论。该'\r'是一个回车-,正在从您的文件中提取 我会注意到,如果所有需要“修复”的行实际上都是以“修复”开头的,并且这就是您想要更改的,那么您可以执行以下操作:
line = line[line.find('Fixes: ')+7:-1]
保存了所有正则表达式的内容。但性能不确定。这应该会同时杀死你的“\r”。这是因为问题发生在他发布代码之前。请参阅我的答案。是的,可能是这样。我正试图鼓励OP发布更多代码和详细信息。采用你的方式会像Saurabh喜欢python一样给我输出\“\r”没有完全获得..而只是r wentAh-如果它将“\r”读取为两个字符,则以倒数第二个字符结尾将达到所需的结果。我没有以二进制模式打开文件。我删除了+es,但看到了相同的输出
with open(filename, "rU") as f:
# do your stuff here.
...
line = line[line.find('Fixes: ')+7:-1]