我尝试在Python中使用regex来匹配文件(保存为字符串,即“/volumes/feeds/foo”)/移动棒)添加到我创建的包含文件列表的日志文件。但是当我运行脚本时,它会给我一个错误:sre_constants.error: unbalanced parenthesis
。我使用的代码是:
要读取文件:
theLogFile = The_Root_Path + ".processedlog"
if os.path.isfile(theLogFile):
the_file = open(theLogFile, "r")
else:
open(theLogFile, 'w').close()
the_file = open(theLogFile, "r")
the_log = the_file.read()
the_file.close()
然后在一个for
循环中,我将the_file
变量作为一个字符串从一个文件列表(通过运行文件夹及其子集并获取所有文件名获得)中重新分配{
每次它碰到代码的re.compile()
部分时,它就会抛出这个错误。如果我试着删掉它,并使用re.search(the_file, the_log)
它仍然会显示出错误。我不明白我怎么会得到不平衡的括号。在
戈登
在我看来,问题出在数据上。您正在将未经检查的字符串从
filelist
编译为regexp,而没有注意到它们可能包含与regexp引擎相关的元字符。在在for循环中,在调用之前添加一个
print the_file
重新编译(使用一个名称作为之前引用file对象的循环迭代器是没有问题的),因此可以看到哪些字符串实际上来自filelist。或者,更好的方法是,在将这些实例传递给重新编译. 这将把所有的元字符转换成它们的正常等价物。在正则表达式模式在哪里?您是否尝试使用一个文件中包含的文件名作为模式来搜索另一个文件?如果是这样的话,您将希望使用类似于
根据the Python ^{} documentation ,
re.compile()
的第一个参数应该是作为字符串的正则表达式模式。在但是
open()
的返回值是一个file对象,您将其分配给the_file
,并传递给re.compile()
。。。。在在第一个代码段中,绑定到名称
the_file
的是一个文件对象,尽管你说那是“另存为字符串”,但文件名(即字符串)实际上命名为theLogFile
,但您试图将其转换为re对象的是而不是theLogFile
(字符串),它是the_file
(现在关闭的文件对象)。考虑到这一点,这个错误有点奇怪(人们可能会期待一个TypeError
),但是很明显,将在re.compile
处得到一个错误。在相关问题 更多 >
编程相关推荐