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