提问人:Fakir 提问时间:3/17/2023 最后编辑:Fakir 更新时间:3/17/2023 访问量:54
在 Python 中循环遍历 string-list 并以 json 格式制作 key:pair
Loop through a string-list and make key:pair in json format in Python
问:
我有一个csv文件:
devid,1, devType,"type-928"
devid,2, devType,"type-930" etc.
行的长度可能会有所不同,具体取决于所包含的键对值的数量。但其中必须有“devid”和“devType”。
想要将它们配对为 key:value 并将它们格式化为 JSON。
从 S3 中检索它作为“列表”,该列表由以 \r 分隔的字符串组成。
Devices: ['devid,1,devType,"type-928"\r', 'devid,2,devType,"type-930"']
for device in Devices:
device_data = device.split(',')
print(device)
获取设备作为“字符串”,以“,”分隔:
devid,1,devType,"type-928"
devid,2,devType,"type-930"
作者:split(',')
device_data = device.split(',')
device_data为:
['devid', '1', 'devType', '"oinet-928"\r']
['devid', '2', 'devType', '"oinet-930"']
等。
由于“device_data”是一个列表,我尝试使用“zip”。
for first, second in zip(device_data, device_data[1:]):
print(first, ":" second)
但它是配对的 1 号和 2 号、2 号和 3 号等。如何获得第一和第二,第三和第四到最后。
devid : 1
1 : devType
devType : "oinet-928"
devid : 2
2 : devType
devType : "oinet-930"
最后想做一个JSON格式的文件,Key:Value将字符串的两个元素配对。如:
{
"data":[
{
"devid": 1,
"devType": "type-928"
},
{
"devid": 2,
"devType": "type-930"
}
]
}
数据中可能有其他值,但必须有“devid”和“devType”,否则将被忽略。
另一个混淆是,如何将所有块的逗号放在“}”之后,但最后一个除外。
任何帮助将不胜感激。
答:
1赞
uds0128
3/17/2023
#1
import json
Devices = ['devid,1,devType,"type-928"\r', 'devid,2,devType,"type-930"']
result = []
for device in Devices:
device = device.strip()
device_data = device.split(',')
temp_dict = { device_data[0]: int(device_data[1]), device_data[2]: str(device_data[3][1:-1])}
result.append(temp_dict)
result_dict = { "data": result }
print(json.dumps(result_dict, indent = 1))
输出
{
"data": [
{
"devid": 1,
"devType": "type-928"
},
{
"devid": 2,
"devType": "type-930"
}
]
}
评论
0赞
Fakir
3/17/2023
似乎它仅限于一行中的两个元素。我已经在第一行中使用了 4 个进行了测试,但它未能得到它们。
3赞
Lukas Hestermeyer
3/17/2023
#2
这解决了您的问题。
lines = [
'devid,1,devType,"type-928"',
'devid,2,devType,"type-930"'
]
data = []
for line in lines:
entries = line.strip().split(',')
keys = entries[0::2]
values = entries[1::2]
data.append({key: value for key, value in zip(keys, values)})
data
这产生
[{'devid': '1', 'devType': '"type-928"'},
{'devid': '2', 'devType': '"type-930"'}]
它的工作原理是检索列表的每个第二个元素(是键)::2
评论