我有逐渐附加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
- 循环)。我不确定我是否可以配合这个想法,或者我是否必须彻底抛弃它。在这种情况下,你能不能给我提示如何解决我的问题?我不确定我是否已将其描述得很好,因为它具体。
答案 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词来表示自己的变量,因为隐藏了标准含义。