在python中查找字符串并将其写入另一个文件

时间:2014-05-20 17:30:36

标签: python

我在Python中编写了一个函数来查找字符串,并将找到字符串的行中的数据发送到另一个函数来存储数据。但有些我怎么没有得到任何错误,也没有我想做的事情。

我附上了代码段

def Find_Member_Functions(Opened_File, Opened_Cpp_File):
 Member_Function_Keyword = '( '
 Found_Functions = ''
 for line in Opened_Cpp_File:
  if re.match(Member_Function_Keyword, line):
   Found_Functions = Member_Functions(Opened_Cpp_File, line)
   Member_Functions = Member_Functions(Opened_File, Found_Functions)
   print str(Found_Functions)
   else:
    print "No keyword could be matched finding again \n"
   break
 return Found_Functions

1 个答案:

答案 0 :(得分:0)

我认为这里有两件事可能会对此有所帮助。

奇怪的事1:

奇怪的是,当我甚至试图运行这个正则表达式时,我得到一个错误,我不明白为什么你没有得到这个。当我尝试运行时:

line = 'hello'
Member_Function_Keyword = "( "
if re.match(Member_Function_Keyword, line):

我得到:sre_constants.error: unbalanced parenthesis

这让我推测你的程序永远不会进入你的正则表达式。我想这是因为你剥离你的字符串的方式 - 你在Iterating_Function中没有任何结果,所以你的正则表达式永远不会被调用。

Strange Thing 2:

您使用if语句的中断 OUTSIDE 。无论发生什么,你的for循环都会在第一个循环中断开。因此,无论第一行包含什么都将结束循环,因此不会返回任何内容。但是,我发现这很奇怪,因为你说根本没有发生,甚至没有打印出else语句。这再次使我得出结论,你必须遇到以下问题之一:

  • 你的正则表达式错了。不太可能没有产生错误
  • 由于没有产生错误 - 永远不会调用正则表达式。这让我想到......
    • 你的文件是空的,或者你在文件上重复两次的奇怪方式就是清空它。

我意识到这不是您问题的解决方案,但我希望它可以帮助您调试它。我会挑衅地检查你文件的内容,检查你是否在你的文件上调用了.read(),对你正在做的奇怪迭代做了些什么,最后在你的break语句上做了缩进。

更新可能的答案

重新查看你的代码,我注意到非常奇怪的事情。首先,你定义Member_Function_Keyword,然后在你的for循环中使用它来覆盖它......

for Member_Function_Keyword in Iterating_Function:

这意味着,对于迭代函数中的每个字母,您将此字母保存为Member_Function_Keyword,然后检查它是否是当前行的第一个字母,它将我带到了下一个点...

您正在使用此行删除文件中的行

Iterating_Function =  [line.strip() for line in Opened_Cpp_File]

然后,使用下一行迭代文件中的行。这看起来很奇怪。

所以,考虑到这些奇怪的事情以及你没有真正告诉我们你希望这个功能做什么的事实,我将尝试做出一些假设。我假设您正在寻找文件中一行开头的括号。那么,您将如何做到这一点:

for line in Opened_Cpp_File:
    if re.match(Member_Function_Keyword, line):
        #Do something here...
        #NOTE, you were doing this:
        #Found_Functions = Member_Functions(Opened_File, line)
        #This is 'recursion' and I can't see why you want it
    else:
        #Do something else

或者,如果您想在找到包含括号的行时停止:

for line in Opened_Cpp_File:
    if re.match(Member_Function_Keyword, line):
        #Do something here...
        break
    else:
        #Do something else
可悲的是,由于问题模糊不清,我做不了多少。我希望这会有所帮助。