我有一个python脚本,以
的形式从服务器收集数据<hh-mm-ss>,<ddd>
这里,第一个字段是Date,第二个字段是整数。这些数据正被写入文件中。
我正在运行另一个线程,它正在绘制我在上一段中提到的文件中的实时图表。
所以这个文件有像
这样的数据<hh-mm-ss>,<ddd>
<hh-mm-ss>,<ddd>
<hh-mm-ss>,<ddd>
<hh-mm-ss>,<ddd>
现在我想用上面显示的数据绘制时间序列Matplotlib图。 但是当我尝试时,它会抛出一个错误说,
ValueError: invalid literal for int() with base 10: '15:53:09'
当我有如下所示的正常数据时,事情很好
<ddd>,<ddd>
<ddd>,<ddd>
<ddd>,<ddd>
<ddd>,<ddd>
更新 我从上面描述的文件生成图形的代码如下所示,
def animate(i):
pullData = open("sampleText.txt","r").read()
dataArray = pullData.split('\n')
xar = []
yar = []
for eachLine in dataArray:
if len(eachLine)>1:
x,y = eachLine.split(',')
xar.append(int(x))
yar.append(int(y))
ax1.clear()
ax1.plot(xar,yar)
更新代码
def animate(i):
print("inside animate")
pullData = open("sampleText.txt","r").read()
dataArray = pullData.split('\n')
xar = []
yar = []
for eachLine in dataArray:
if len(eachLine)>1:
x,y = eachLine.split(',')
timeX=datetime.strptime(x, "%H:%M:%S")
xar.append(timeX.strftime("%H:%M:%S"))
yar.append(float(y))
ax1.clear()
ax1.plot(xar,yar)
现在我收到此行的错误(ax1.plot(xar,yar)
)
我将如何克服这个?
答案 0 :(得分:0)
您正在尝试从表示时间戳的字符串中解析整数。当然它失败了。
为了能够在绘图中使用时间戳,您需要将它们解析为正确的类型,例如datetime.time
或datetime.datetime
。您可以使用datetime.datetime.strptime()
,dateutil.parser.parse()
或time.strptime()
进行此操作。
绘制数据是直截了当的。看一下交互式绘图模式:matplotlib.pyplot.ion()
。
供参考/进一步阅读:
根据您的代码,我创建了一个示例。我已经概述了为什么我认为这样做更好。
# use with-statement to make sure the file is eventually closed
with open("sampleText.txt") as f:
data = []
# iterate the file using the file object's iterator interface
for line in f:
try:
t, f = line.split(",")
# parse timestamp and number and append it to data list
data.append((datetime.strptime(t, "%H:%M:%S"), float(f)))
except ValueError:
# something went wrong: inspect later and continue for now
print "failed to parse line:", line
# split columns to separate variables
x,y = zip(*data)
# plot
plt.plot(x,y)
plt.show()
plt.close()
进一步阅读:
答案 1 :(得分:-1)
错误告诉您问题的原因:您正在尝试将字符串(例如'15:53:09'
)转换为整数。此字符串不是有效数字。
相反,您应该考虑使用datetime模块中的datetime
对象来处理日期/时间事务,或者至少使用{{1}将字符串split
转换为字段分隔符和分别使用每个字段。
考虑这个简短的演示:
':'