使用范围的Python for循环导致打印索引而不是值

时间:2018-03-08 19:57:54

标签: python for-loop range

我正在从两个配置文件的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]

我知道我必须遗漏一些基本的东西,但似乎无法找到答案。

3 个答案:

答案 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中的不同对象类型做什么