我正在从两个配置文件的difflib比较中循环下面的输出: -
[server]
+ # web-host-name = www.myhost.com
+ https-port = 1080
+ network-interface = 0.0.0.0
[process-root-filter]
[validate-headers]
[interfaces]
[header-names]
[oauth]
[tfim-cluster:oauth-cluster]
[session]
+ preserve-inactivity-timeout = 330
[session-http-headers]
我想要实现的是解析差异,只打印出标题([]中的项目,列表中的下一个项目以+
开头我有以下运行且没有错误的代码。
for x in range(0, (len(diff) - 1)):
print str(x) #prints index number instead of the content of the line
z = str(diff)[x+1]
if str(x).startswith('+'):
print(x) # prints nothing x contains the index of the line instead of the text
elif str(x).startswith(' [') and z.startswith('+'):
print(x)
问题是在循环中返回行的索引号而不是行中的文本。
e.g。打印输出
[0]
[1]
[2]
[3]
[4]
我知道我必须遗漏一些基本的东西,但似乎无法找到答案。
答案 0 :(得分:0)
你正在做的是循环遍历范围0到diff-1长度的x。 这将为您提供这两个整数之间的所有整数值,例如:
for x in range(0, 3):
print(str(x) + ' ')
会回复你:
0 1 2 3
因此,如果diff是每个新行的字符串列表,要获取该行,您可以使用:
# iterate through list diff
for x in diff:
print(x)
打印出所有行。如果您现在想要在打印之前知道它是否是标题:
# iterate through list diff
for x in diff:
# test if x is a header
if x.startswith('[') and x.endswith(']'):
print(x)
请注意,此代码均未经过测试。
希望这有帮助
编辑: 如果diff不是行列表而是单个字符串,则可以使用
line_list = diff.split('\n')
获取行列表。
编辑2: 如果您现在还要检查第一次迭代中的下一行,我们必须改为使用索引:
# for every index in list diff
for i in range(0, len(diff) - 1):
if diff[i].startswith('[') and diff[i + 1].startswith('+'):
# do something if its a header with following content
elif diff[i].startswith('+'):
# do something if the line is data
答案 1 :(得分:0)
for x in range(0, (len(diff) - 1)):
print str(x) #prints index number instead of the content of the line
这里打印索引的原因是因为x没有迭代diff的内容,它迭代的整数范围等于diff的长度。你已经有了答案,为什么你的印刷品在下一行提供索引而不是字符串内容:z = str(diff)[x+1]
调用diff[x]
是指索引x处的diff行,所以如果你想打印diff的内容或在后面的行中引用它,你需要做同样的事情:print str(diff[x])
答案 2 :(得分:0)
感谢上面的@pheonix和@rdowell评论。我已将代码更新到下面,现在可以使用: -
for i in range(0, len(diff) - 1):
if diff[i].startswith(' [') and diff[i + 1].startswith('+'):
# do something if its a header with following content
print str(diff[i])
elif diff[i].startswith('+'):
# do something if the line is data
print str(diff[i])
这篇文章将是我将要回顾的内容,因为我只是想知道你可以做什么,不能用Python中的不同对象类型做什么