2015-12-03 115 views
2

一个bash的内容我有文件,其中bash的字符串变量逐渐追加:函数来获取变量

URI += "path \ 
    path \ 
    path \ 
" 
<some other code> 

#URI += "path" 

URI += "path \ 
    path" 

正如你可能会注意到有appendings的方式不同,部分几行。这些文件中还有其他代码。

现在我试着写一个函数,它获取的变量(引号之间的所有内容)内容:我尝试手动提高循环和追加的所有行,直到另一个

def grepVar(filepath, var): 
    list = [] 
    with open(filepath, "r") as file: 
     for num, line in enumerate(file, 1): 
      if var in line: 
       if line.count('"') is 2: 
        list.append(line) 

# until here it works for "URIs" over 1 line 

       else: 
        num = num + 1 
        while(line.count('"') is 0): 
         list.append(line) 
         num = num + 1 
    return list 

print grepVar(path, "URI") 

所以在else条件报价会出现(while -loop)。我不知道我是否可以配合这个想法,或者如果我不得不完全放弃它。在这种情况下,你能否给我提示如何解决我的问题?我不确定自从它的具体类型以来我是否描述过它。

回答

1

由于line如果通过更高级别for num, line in enumerate(file, 1):循环给出,则不能在该循环内使用while (line...)

解决此问题的常用方法是在行之间保存状态。你的功能可能会成为(我删除num管理,因为我无法理解的要求):

def grepVar(filepath, var): 
    lst = [] 
    inquote = False 
    with open(filepath, "r") as fil: 
     for num, line in enumerate(fil, 1): 
      if inquote: 
       lst.append(line) 
       if line.count('"') > 0: 
        inquote = False 
      elif var in line: 
       if line.count('"') == 2: 
        lst.append(line) 
       else: 
        lst.append(line) 
        inquote = True 
    return lst 

你也应该避免使用标准的Python了诸如file为自己的变量list,因为隐藏标准含义。

+0

这是我需要的提醒,谢谢。 – h0ch5tr4355

+0

关于避免使用标准的Python语言:由于可读性(命名约定),它是不好的,或者你可以得到真正的问题吗?我同意你的看法,但在许多教程中,他们只是使用“list”或“file”作为变量。可能会有这种习惯,但会尝试听从你的建议:-) – h0ch5tr4355

+0

另一条评论...我想在第7行('lst.append(line)'你做了错误的缩进 – h0ch5tr4355