2016-05-08 3 views
0

Я пытаюсь прочитать данные из файла, а затем построить словарь из файла. В этом словаре я хочу построить график с ключами словаря в виде графика X и значений словаря в качестве значений разметки. Однако ключевыми значениями являются строки, и мне просто нужно их обозначать. Я попробовал следующий код, который вызывает ошибку, указывающую, что значение ключа является строкой.Построение набора ключей и значений в Python

The data from the data.txt file reads as follows: 
new:10,not new:30,10:40,a:5.0 

from matplotlib import pyplot as plt 
import numpy as np 

fileopen=open("data.txt", "r") 
for a in fileopen.readlines(): 
b= a.split(",") 
fileopen.close() 
newdict={} 
for c in b: 
newdict.update({c.rstrip("\',\",").split(":")[0]:eval(c.rstrip("\',\",").split(":")[1])}) 


plt.figure(figsize=(8,6), dpi=80) 
x=[i for i in newdict] 
plt.xticks(np.linspace(0,4,1, endpoint=True)) 
y=[newdict[j] for j in newdict] 
plt.plot(y, color="blue", linewidth=1.0, linestyle="-") 
plt.show() 

И это ошибка, которую я получаю на своей консоли.

File "C:\Users\Annakoppad\Anaconda2\lib\site-packages\numpy\core\numeric.py", line 474, in asarray 
return array(a, dtype, copy=False, order=order) 

ValueError: could not convert string to float: a 

Я не могу продолжить дальше, может кто-то помочь в этом отношении?

Заранее благодарен!

ответ

0

Попробуйте использовать csv, если это действительно данные csv. csv.DictReader может вам помочь. В идеале ключевые имена не смешиваются через данные, но должны быть определены позиционно на основе первой строки, с рядами, как:

new,not new,10,a 
10,30,40,5.0 

, если вы не хотите, чтобы положить ключи в CSV-файл на всех, вы могли бы определить последовательность ключевых имен:

keys=("new","not new",10,"a") 

Помните, что при работе с CSV (а также readlines), каждое значение считывается как строка, поэтому, если строки содержат различные типы данных, которые вы должны будете преобразовать личность ключи для получения ints или floats.

ref: csv https://docs.python.org/3/library/csv.html?highlight=csv#csv.DictReader

Смежные вопросы