2015-12-03 161 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