Python的正则表达式到一个文件中的文件列表匹配(得到错误)

我试图用一个正则表达式在Python到一个文件(保存为一个字符串,如“/volumes/footage/foo/bar.mov”)匹配到一个日志文件创建一个包含文件的列表。 但是,当我运行该脚本,它给了我这个错误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变量从文件列表的字符串(通过一个文件夹中运行得和它的子集,并抓住所有的文件名 ​​) ,然后尝试使用正则表达式,看看是否该文件名出现在日志文件中:

for the_file in filenamelist: p = re.compile(the_file, re.IGNORECASE) m = p.search(the_log)

每次它击中re.compile()的部分代码就吐出了这个错误。 如果我试图削减了这一点,并使用re.search(the_file, the_log)仍然吐出了这个错误。 我不明白我怎么会越来越不平衡括号来源于此。

--------------解决方案-------------

戈登,

它似乎对我来说,问题是数据。 您正在编制的未经检验字符串filelist到正则表达式,没有注意到他们可能包含相关的正则表达式引擎的元字符。

在您的for循环,增加print the_file在调用之前re.compile(这是您要重新使用的名称作为循环迭代的简称之前的文件对象没有问题),所以你可以看到哪些字符串实际上来了从文件列表。 或者,更好的是,运行the_file所有实例通过re.escape传递他们re.compile之前。 这将会把所有的元字符到其正常的等价物。

哪里是正则表达式模式? 你们是不是要使用包含在一个文件名的方式来搜索其他文件? 如果是这样,你将要逐步完成the_file与成才像

for the_pattern in the_file:
p = re.compile(the_pattern, re.IGNORECASE)
m = p.search(the_log)
...

据Python的re.compile文档中,第一个参数re.compile()应该是正则表达式模式为字符串。

但返回值open()是一个文件对象,分配给the_file并传递给re.compile()

什么你绑定的名字the_file在你的第一个片段是一个文件对象,即使你说这是“另存为一个字符串”,文件名 ​​(即字符串)实际上是一个名为theLogFile但你想说的就是牛逼转成RE 对象不是theLogFile字符串),它是the_file现已关闭的文件对象)。 鉴于此,错误的是有点奇特(人会期望一个TypeError ),但很明显你会得到一个错误的re.compile

the_file应该是字符串。 在上面的代码the_file是开放的返回值,这是一个文件对象。

分类:蟒蛇 时间:2015-03-15 人气:127
本文关键词: 正则表达式,蟒蛇
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.567 (s). 10 q(s)