我试图从JSON文件中提取一些数据,这些文件都有相同的结构,然后将所选的数据写入一个新的JSON文件。我的目标是创建一个新的JSON文件,它或多或少是我的文件夹中每个JSON文件的数据列表:文件名,触发器数据,速度{imgVel,trigVel},坐标。
在我的程序的下一个步骤中,我将需要这个新的splitTest 1来分析不同文件的数据。
我有以下代码:
base_dir = 'mypath'
def createJsonFile() :
splitTest1 = {}
splitTest1['20mm PSL'] = []
for file in os.listdir(base_dir):
# If file is a json, construct it's full path and open it, append all json data to list
if 'json' in file:
json_path = os.path.join(base_dir, file)
json_data = pd.read_json(json_path, lines=True)
if splitTest1[file]['20mm PSL'] == to_find:
splitTest1['20mm PSL'].append({
'filename': os.path.basename(base_dir),
'triggerdata': ['rawData']['adcDump']['0B'],
'velocity': {
'imgVel': ['computedData']['particleProperties']['imgVelocity'],
'trigVel': ['computedData']['img0Properties']['coordinates']},
'coordinates': ['computedData']['img1Properties']['coordinates']})
print(len(splitTest1))
字符串
当我运行代码时,我得到这个错误:
'triggerdata': ['rawData']['adcDump']['0B'], TypeError: list indices must be integers or slices, not str
型
代码出了什么问题?我该如何修复?
这是我之前的代码,我如何访问数据,而不保存在另一个JSON文件:
with open('myJsonFile.json') as f0:
d0 = json.load(f0)
y00B = d0['rawData']['adcDump']['0B']
x = np.arange(0, (2048 * 0.004), 0.004) # in ms, 2048 Samples, 4us
def getData():
return y00B, x
def getVel():
imgV = d0['computedData']['particleProperties']['imgVelocity']
trigV = d0['computedData']['trigger']['trigVelocity']
return imgV, trigV
型
基本上,我尝试将最后一个代码片段放入一个循环中,该循环阅读文件夹中的所有JSON文件,并创建一个新的JSON文件,其中包含这些文件的名称列表和其他一些选定的数据(如['rawData']['adcDump']['0 B']等)
4条答案
按热度按时间eblbsuwk1#
我假设你想做的是从几个json文件中获取一些数据,并将它们编译成一个列表,然后将其写入一个新的json文件。
为了从当前的json文件中获取数据,你需要在索引前面添加一个“引用”(否则代码不知道数据应该从哪里来)。像这样:
字符串
所以基本上你需要做的就是在索引前面添加“json_data”。
另外,我建议你把变量“json_path”而不是“base_dir”写进“文件名”字段。
yzxexxkh2#
我在Mattu 475的帖子的帮助下找到了解决方案
我不得不在索引前面添加引用,并使用以下代码更改如何打开文件夹中的文件;
字符串
而不是pd.read_json(...)
下面是完整的代码:
型
有几行(注解掉的那几行)还不能100%正常工作,但其余的都可以工作。
weylhg0b3#
问题出在这条线上
第一个月
然后是后面的两个。这里发生的是你创建了一个列表,其中字符串“computedData”作为唯一的元素。然后试图找到索引“particleProperties”,这没有意义。你只能用整数索引列表。我真的不能给予你一个“解决方案”,但如果你想让
imgVel
只是这些字符串的列表,那么你可以这样做'imgVel': ['computedData', 'particularProperties', 'imgVelocity']
个e0uiprwp4#
你的dict值不是法律的Python。
字符串
这个值没有任何意义:你创建了一个字符串的列表,然后试图用另一个字符串索引它。你要求列表
['rawData']
的元素“adcDump”,但没有任何这样的语法。您不能将任意源代码(您的部分表达式)存储为数据值。