这里有一个非常直截了当的问题…我希望将正则表达式匹配附加到同一行,而不是文件中的新行。我以为我做得对,但结果仍然是打印到一个新的行:
结果:
1,2,BreakingBad,4,5,6...
,BreakingBad
我想要的:
^{pr2}$当前代码:
#!/usr/bin/env python
import re
import sys
file = open("/home/test", "r")
newfile = open("/home/testresults","w")
def regex():
#old_stdout = sys.stdout
#sys.stdout = newfile
lines = file.readlines()
for line in lines:
regex = re.search(r'(BreakingBad)',line)
if regex:
print line + "," + regex.group(1)
try:
regex()
finally:
file.close()
我错过了什么?在
从行中删除换行符:
您也可以/可能只使用切片,但这将取决于行尾是否有新行:
^{pr2}$我不会这样做,因为你必须确切地知道每个文件是如何格式化的,如果在任何时候有任何错误,你可能会有一个很难找到的bug。在
还有一些不太像python的东西,尽管它们更适合代码评审。
既然评论太长了,我就把它当作一个答案。在
小结:
使用
with
上下文管理器。这样就省去了try ... finally
的麻烦,确保文件在之后关闭。不要使用
file
作为变量名:这是一个保留的类名(对于文件对象,同样如此)不要使用全局变量:只需将文件名传递给
regex()
函数迭代file对象。这样就节省了对
readlines()
的调用,然后迭代这些行。迭代一个文件可以一次性完成相同的事情。在这个迭代也可以节省内存,因为它不会一次性读取完整的文件,而是一行一行地读取。有关详细信息,请参见示例this post。
简单的单词搜索不需要正则表达式。一般来说,首先尝试避免使用regex,然后看看还有什么其他选项(有很多有用的方法可以
str
)。在关于regex的通常说法是
(here's one post on this topic。)
在这种情况下,一个简单的
if word in sentence
表单就可以做到这一点。这可能会给出以下代码:
请注意,我显式地
rstrip
只对换行符执行ping操作:如果只使用rstrip()
,它将从右侧删除任何空白字符,包括空格和制表符。这也许是有意为之,但从问题上看还不清楚。在进一步:由于您打开了一个文件进行写入(但不要使用它,也就是说,它对您的问题不是必需的):您可以在
^{pr2}$with
语句中组合文件:该文件包含附加新行的字符串。Python将其理解为:
lines = '1,2,BreakingBad,4,5,6...\n'
因此,当连接时,字符串为:
1,2,BreakingBad,4,5,6...\n,BreakingBad
您真正想要的是删除换行符:
相关问题 更多 >
编程相关推荐