我正在尝试从文件中读取数据,然后从文件中构建字典。使用这个字典,我想绘制一个图表,其中字典的键作为X图,字典的值作为标记值。但是,键值是字符串,我只需要标记它们。我尝试了以下代码,它抛出一个错误,指出键值是一个字符串。
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 :(得分:0)
如果这是真正的csv数据,请尝试使用csv
。 csv.DictReader
也许可以帮到你。理想情况下,键名不是通过数据混合的,而是根据第一行的位置定义,行如:
new,not new,10,a
10,30,40,5.0
如果您根本不想将密钥放在csv中,您可以定义一系列密钥名称:
keys=("new","not new",10,"a")
请记住,在使用csv(以及readlines)时,每个值都被读取为字符串,因此如果行包含不同的数据类型,则必须将各个键转换为获取整数或浮点数。
参考:csv https://docs.python.org/3/library/csv.html?highlight=csv#csv.DictReader