循环遍历python

时间:2017-05-31 12:19:57

标签: python arrays json

我在我导入脚本的数组中有JSON

"ip_address": [
"192.168.0.1",
"192.168.0.2",
"192.168.0.3"
]

我正在加载JSON并声明一个名为ip_address的变量。

data = yaml.load(message)
    for d in data: 
        ip_address = (d.get('ip_address'))

我试图通过ip地址使用python循环。

for address in data['ip_address']:  
      print(address)

我现在收到一条告诉我的错误

string indices must be integers, not str

3 个答案:

答案 0 :(得分:2)

在您的情况下ip_address = '192.168.0.1'

您确定ip_address中有正确的价值吗?

答案 1 :(得分:2)

它打印个别号码的原因是因为地址是一个字符串。因此,它并不是每个正在打印的数字,而是每个字母的字母。考虑:

word = "abc"
for letter in word:
    print(letter)

# prints:
# a
# b
# c

因此,它意味着您将某个IP地址分配给变量,然后遍历该变量(这是一个字符串)。如果没有提供有关如何获得ip_address变量的更多代码,则很难说出问题所在。

打印IP地址的一种方法(假设你有一个dict):

addresses = {"ip_address": [
    "192.168.0.1",
    "192.168.0.2",
    "192.168.0.3"
]}

for address in addresses["ip_address"]:  # this gets you a list of IPs
      print(address)

即使你把它们放在其他地方,要带走的关键洞察力是不要遍历字符串,因为你会得到字符(除非那是你想要的)。

已更新以解决修改

由于我没有你正在加载的文件(是文件吗?),我会假设我有你发布的确切字符串。这是您使用所提供的数据打印每个地址的方式。请注意,您的情况可能略有不同,因为,我不知道完整的代码。

# the string inside load() emulates your message
data = yaml.load('"ip_address": ["192.168.0.1", "192.168.0.2", "192.168.0.3"]')
ip_addresses = data.get('ip_address')

for address in ip_addresses: 
    print(address)

答案 2 :(得分:0)

我试过以下:

ip_address = [ "192.168.0.1", "192.168.0.2", "192.168.0.3" ]

>>> ip_address = [ "192.168.0.1", "192.168.0.2", "192.168.0.3" ]

>>> 

>>> for i in ip_address:  

...     print i

... 它打印

192.168.0.1

192.168.0.2

192.168.0.3

它似乎对我来说很好。