2014-09-03 116 views
1

我想搜索文件中的特定字符串,并基于该文件我必须处理文件数据。使用“with”的文件对象超过1次

我知道如何做2次打开文件。

这可以通过打开文件只有一次?

代码:

with open(path, "r") as _file: 
    for line in _file: 
     if "my_string" in line: 
      flag = True 
      break 

with open(path, "r") as _file: 
    for line in _file; 
     if flag: 
      process line 
      ... 
     else: 
      process differently 
      ... 

我想:

with open(path, "r") as _file: 
    for line in _file: 
     if "my_string" in line: 
      flag = True 
      break 

    for line in _file; 
     if flag: 
      process line 
      ... 
     else: 
      process differently 
      ...   

但在这里第二次的循环,从那里第一环已经离开启动时,它不会从文件的第一行开始,这就是为什么它的不在这里工作。

+0

为什么你要先标志?为什么你不能直接在你的if循环中处理它? – 2014-09-03 06:06:40

+0

@BurhanKhalid因为“我的字符串”是在文件的第一行和最后一行之间,我也必须在第二次循环之前处理文件 – Patrick 2014-09-03 06:08:36

回答

2

您需要在第二个循环之前将文件位置倒回到开头。你可以用_file.seek(0)来做到这一点。

+0

_file.seek(0)的每一行吗? – Patrick 2014-09-03 06:21:39

+0

当然,对不起 – wRAR 2014-09-03 07:07:44

+0

只是想知道是否有其他方法可以做到这一点? – Patrick 2014-09-03 13:08:58