我有一个带有ip的.csv文件,我用Python将其转换为列表:
def ip_list():
iplist = []
with open("/path/to/file") as csvfile:
csvlist = csv.reader(csvfile)
for lists in csvlist:
for item in lists:
iplist.append(item)
return iplist
ip = ip_list()
print(ip)
>>> ["192.168.1.1", "192.168.1.2", ...]
现在我想要列表中的每个值,并每次将它们附加到给定的参数。
上下文函数:
def gencontent(ip, value1, value2, time):
content = [
{
"example": {
"ipadress": ip
}
}
]
return content
ip = ["192.168.1.1", "192.168.1.2", "192.168.1.3"]
content = getcontent(ip[0-...], value1, value2, time)
我想循环的内容与每个值在ip:
#Example list for reproduction
ip = ["192.168.1.1", "192.168.1.2", "192.168.1.3"]
content = getcontent(ip[0-...], ...)
I do not want:
#Example list for reproduction
ip = ["192.168.1.1", "192.168.1.2", "192.168.1.3"]
content1 = getcontent(ip[0], ...)
content2 = getcontent(ip[1], ...)
...
我想基本上每次都用一个新的ip值循环内容。
谢谢!
我不知道getcontent()函数做什么,但是为什么不使用列表理解循环遍历列表中的项呢?
content = [getcontent(x) for x in ip]
如果您只是想索引它们,也许您可以转换为元组并使用enumerate
。例如:
ip = ["192.168.1.1", "192.168.1.2", "192.168.1.3"]
indexed_ip = enumerate(tuple(ip))
print(list(indexed_ip))
# OUTPUT:
# [(0, '192.168.1.1'), (1, '192.168.1.2'), (2, '192.168.1.3')]
或者如果您希望索引从1开始,而不是从0开始:
ip = ["192.168.1.1", "192.168.1.2", "192.168.1.3"]
indexed_ip = enumerate(tuple(ip), 1)
print(list(indexed_ip))
# OUTPUT:
# [(1, '192.168.1.1'), (2, '192.168.1.2'), (3, '192.168.1.3')]
或者,在这种情况下,也许字典对你有用。
下面是一个使用字典推导式的例子:
ip_dict = { ip.index(ip_item): ip_item for ip_item in ip}
print(ip_dict)
# OUTPUT:
# {0: '192.168.1.1', 1: '192.168.1.2', 2: '192.168.1.3'}
你可以给字典的键命名,随你的便。如果您发送的是content0
,content1
等,您可以将字典理解中的键值更改为f’content{str(ip.index(ip_item))}’
之类的值。然后,您可以使用ip_dict['content1']
等从ip_dict
获得值。
关于content = getcontent(ip[0-...])
你能更具体一点吗?
ip = ["192.168.1.1", "192.168.1.2", "192.168.1.3"]
def getip(li):
for item in li:
yield(item)
ipgetter = getip(ip)
content = getcontent(next(ipgetter), value1, value2, time) # getcontent got "192.168.1.1"
content = getcontent(next(ipgetter), value1, value2, time) # getcontent got "192.168.1.2"
如果循环已结束,则抛出StopIteration异常