После записи диктанта в CSV , как вы можете отменить это, чтобы получить исходный диктант

#python #csv #dictionary

Вопрос:

У меня есть скрипт на python, который сохраняет мой диктант в формате csv

Мой диктант имеет следующую структуру:

 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

Комментарии:

1. По какой-либо конкретной причине вы используете csv? Использование json было бы намного проще, с дампами/загрузками.

2. Теперь уже слишком поздно, так как я уже сохранил их .

3. это почти похоже на то, что вы могли eval бы это сделать?

4. разделены ли ваши массивы пробелами или запятыми?

5. разделенные запятыми

Ответ №1:

все прошло не так гладко, как я думал, так что это немного некрасиво, но должно сойти

 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.]  

Комментарии:

1. не могли бы вы объяснить, как это будет использоваться, если вместо TUV у вас будет несколько символов, например T_MEAN, T_MSQR?

2.вместо ([TUV]) (T_MEAN|T_MSQR) того, чтобы делать

Ответ №2:

Прочитайте csv-файл с помощью read_csv от pandas. Затем используйте метод to_dict ().

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

Комментарии:

1. это не будет учитывать диктант для каждого диктанта[ppl]