【发布时间】:2014-01-16 01:57:17
【问题描述】:
我正在尝试使用 matplotlib(在 Python 2.6 中)从 csv 文件中绘制数据,但在从 csv 中读取数据时遇到了一些问题:
import pylab
# works fine - manually output data for debug
with open(datafile,'rb') as f:
for row in f:
print row
# fails - "no data" error
a = pylab.loadtxt(datafile, comments='#', delimiter=',', skiprows=1)
手动读取数据可以正常工作(with open 部分)。 pylab.loadtxt 代码抛出错误:
raise IOError('End-of-file reached before encountering data.')
IOError: End-of-file reached before encountering data.
我最初认为这是数据文件中的换行符的问题(即,可能所有内容都在一行上并被skiprows=1 跳过),但我通过在记事本中手动创建测试文件并查看同样的错误。这是测试文件中的数据:
time,temperature
193,23.1
4040,23.2
4357,23.3
4423,23.4
我还尝试删除标题行并省略代码的skiplines=1 部分。这也失败了,但出现了不同的错误:
ValueError: invalid literal for float(): 23.1
至少这表明它“看到”了数字数据。
我在这里做错了什么?
【问题讨论】:
-
请运行
f = open(datafile, 'rb'); print(repr(f.read(50)))并发布输出。 -
@unutbu - 带标题 + 跳过:
'time, temperature\r193,23.1\r4040,23.2\r4357,23.3\r442'和没有标题:'193,23.1\r4040,23.2\r4357,23.3\r4423,23.4'。所以似乎数据显示\r(返回?)而不是\n(换行符)? -
@unutbu - 感谢您的帮助。我将进一步研究数据生成(它来自 Arduino,通过串行)。但是我真的很困惑为什么在TextPad中手动创建的文件会有这个问题。
-
@Roberto 你在 Mac 上吗?
-
@bcorso - 感谢您的帮助。不,它是 Windows 7。看起来你们是对的,问题出在换行符分隔符上。现在只是做一些最后的检查来清理它。