我有一个函数:
def devices():
devices = []
device = {}
with open('devices.txt', 'r') as file:
lines = file.readlines()
print(lines)
for line in lines:
device['ip'] = line.split(';')[0].strip()
device['name'] = line.split(';')[1].strip()
print(device)
devices.append(device)
print(devices)
return devices
File devices.txt有一个下一个布局:
1.1.1.1;device-1
2.2.2.2;device-2
当我在循环中打印设备字典时-它是正常的。然而,作为返回,我得到了下一个列表:
[{'ip':'2.2.2.2', 'name':'device-2'},{'ip':'2.2.2.2', 'name':'device-2'}]
为什么?为什么不是文件中的所有设备,而是最后一个2次。
发布于 2018-07-15 10:00:23
真的很有趣的问题!一开始我有点困惑,为什么它不工作,然后我意识到循环之外的dic。我通常不使用dics,因为这些奇怪的问题,在你的例子中,当变量已经被附加时,改变它。下面是您的代码的一个简单解决方案
def devices():
devices = []
with open('devices.txt', 'r') as file:
lines = file.readlines()
#print(lines)
for line in lines:
device = {}
device['ip'] = line.split(';')[0].strip()
device['name'] = line.split(';')[1].strip()
print(device)
devices.append(device)
print(devices)
(如果你想看看dics有多奇怪,你可以在追加之前写device = {}
,输出结果是:{'ip':'2.2.2.2','name':'device-2'},{} {'ip':'2.2.2.2','name':'device-2'}是如何实现的,不知道)
发布于 2018-07-15 08:19:31
def devices():
with open('devices.txt', 'r') as file:
return [{'ip':line.split(';')[0].strip(), 'name':line.split(';')[1].strip()} for line in file.readlines()]
print(devices())
# [{'name': 'device-1', 'ip': '1.1.1.1'}, {'name': 'device-2', 'ip': '2.2.2.2'}]
https://stackoverflow.com/questions/51344106
复制相似问题