【发布时间】:2015-12-25 18:58:03
【问题描述】:
试图找到一种优雅的方式将文件名从os.walk() 循环插入到将作为 JSON 输出的 Python 对象中的 特定 子元素(为了找到更好的术语)文件。如果这没有多大意义,这里是我迄今为止拼凑的一些视觉输出。
使用的代码:
import os
from os.path import normpath, basename
import json
ROOT_PATH = "sounds/"
jsonObject = []
for path, subdirs, files in os.walk(ROOT_PATH):
if files:
elementId = basename(normpath(path)) + "Audio" # <-- builds custom Id based on path
jsonObject.append( { "elementId" : elementId, "params" : { "audioPath" : path, "sounds" : [] } } )
for name in files:
jsonObject.append(name) # <-- problem lies here...
with open('sounds/Elements.json', 'w') as outfile:
json.dump(jsonObject, outfile, indent=3, ensure_ascii=False, sort_keys=True)
...产生:
[
{
"elementId": "soundsAudio",
"params": {
"audioPath": "sounds/",
"sounds": []
}
},
"beep2.mp3",
"heart_rate_flatline.mp3",
"shhh.mp3",
{
"elementId": "aha_aedAudio",
"params": {
"audioPath": "sounds/aha_aed",
"sounds": []
}
},
"AnalyzingHeartRhythm.mp3",
"AttachPadsToPatientsBareChest.mp3",
"BeginCPR.mp3",
"Charging.mp3",
"DoNotTouchThePatient.mp3"
]
...这是真的接近。但是我在将 mp3 文件列表 放入 sounds 部分时遇到了一个难题,所以它看起来像这样:
[
{
"elementId": "soundsAudio",
"params": {
"audioPath": "sounds/",
"sounds": [ "beep2.mp3",
"heart_rate_flatline.mp3",
"shhh.mp3"
]
}
},
{
"elementId": "aha_aedAudio",
"params": {
"audioPath": "sounds/aha_aed",
"sounds": [ "AnalyzingHeartRhythm.mp3",
"AttachPadsToPatientsBareChest.mp3",
"BeginCPR.mp3",
"Charging.mp3",
"DoNotTouchThePatient.mp3"
]
}
}
]
.append、.extend 和 .insert 在这一点上让我失望(或者我可能没有正确使用它们),并且执行了一个过于复杂的正则表达式 search-n-replace-copy-n- sounds 元素的粘贴操作感觉...有点脏。
我意识到在将整个内容输出到 JSON 文件之前,我可能会接受这样做。非常感谢我能吸收的任何想法、提示或解决方案示例!
【问题讨论】:
标签: python json list object insert