用于获取bash变量内容的函数

时间:2015-12-03 14:03:40

标签: python

我有逐渐附加bash字符串变量的文件:

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

#URI += "path"

URI += "path \
     path"

你可能会注意到有不同的附加方式,部分是多行。这些文件中还有其他代码。

现在我尝试编写一个获取变量内容的函数(引号之间的所有内容):

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 - 循环)。我不确定我是否可以配合这个想法,或者我是否必须彻底抛弃它。在这种情况下,你能不能给我提示如何解决我的问题?我不确定我是否已将其描述得很好,因为它具体。

1 个答案:

答案 0 :(得分: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

您还应该避免使用list file等标准Python词来表示自己的变量,因为隐藏了标准含义。