将字典写入CSV后,如何将其还原为检索原始字典



我有一个python脚本,它将我的字典保存为csv文件

我的dict具有以下结构:

dict_data= dict()

xplanes=[7,3,10,11]
field = ['T','V','U']
for ppl in xplanes:
dict_data[ppl] = dict()
for ff in field
dict_data[ppl][ff] = ...Some... numpy array



现在我将字典写入csv文件

with open('file.csv','w') as f:
write=csv.write(f)
for k,v in dict_data.items():
write.writerow([k,v])

csv文件的结构如下:

7,"{'T': array([ 637525.25 ...... , ], dtype=float32)
,  'V': array([ 637525.25 ...... , ], dtype=float32)
,  'U': array([ 637525.25 ...... , ], dtype=float32)}"
3,"{'T': array([ 637525.25 ...... , ], dtype=float32) ....
"}

现在我正在努力读取该文件并将其还原为我曾经拥有的字典,即dict_data

它没有我想象的那么顺利,所以它有点丑,但应该做

from numpy import array, float32
import re
txt="""
7,"{'T': array([1,2,3], dtype=float32)
,  'V': array([1,2,3], dtype=float32)
,  'U': array([1,2,3], dtype=float32)}"
3,"{'T': array([1,2,3], dtype=float32)
,  'V': array([1,2,3], dtype=float32)
,  'U': array([1,2,3], dtype=float32)}"
10,"{'T': array([1,2,3], dtype=float32)
,  'V': array([1,2,3], dtype=float32)
,  'U': array([1,2,3], dtype=float32)}"
11,"{'T': array([1,2,3], dtype=float32)
,  'V': array([1,2,3], dtype=float32)
,  'U': array([1,2,3], dtype=float32)}"
"""
splitter=re.compile('(^d{1,2}),', re.MULTILINE)
get_k_v=re.compile("'([TUV])': (array[^)]+))")
splits=re.split(splitter, txt)
old_dict={}
for split in splits:
if split=='n':
continue
elif split.isdigit():
k=int(split)
else:
res=re.findall(get_k_v, split)
old_dict[k]={k: eval(v) for k,v in res}
print(old_dict[7]['T'])
>>> [1. 2. 3.]

使用read_csv从pandas读取csv文件。然后使用to_dict()方法。

import pandas as pd
data = pd.read_csv("file.csv")
print(data.to_dict())

相关内容

  • 没有找到相关文章

最新更新