【问题标题】:python EOF error when reading csv data with pylab (matplotlib)使用pylab(matplotlib)读取csv数据时出现python EOF错误
【发布时间】: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。看起来你们是对的,问题出在换行符分隔符上。现在只是做一些最后的检查来清理它。

标签: python csv numpy


【解决方案1】:

正如@unutbu 所说,问题很可能是换行符\r 对于Windows 应该是\r\n

如果你不想创建一个新文件,你可以使用 StringIO

from StringIO import StringIO

output = StringIO.StringIO()
with open(datafile, 'rb') as f:
    output.write( f.read().replace('\r', '\r\n') )

import pylab
a = pylab.loadtxt(output, comments='#', delimiter=',', skiprows=1)    

【讨论】:

    【解决方案2】:

    在 Windows 上,行分隔符是 \r\n。在 Unix 上,行分隔符是 \n。您的数据文件没有遵循这些约定,这就是 pylab(错误,numpy)无法正确解析文件的原因。

    修复文件:

    import os
    outfile = datafile+'-fixed'
    with open(datafile, 'rb') as f, open(outfile, 'wb') as g:
        content = f.read()
        g.write(content.replace('\r', '\r\n'))
    os.rename(outfile, datafile)
    

    【讨论】:

      猜你喜欢
      • 2015-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-31
      • 2020-08-21
      相关资源
      最近更新 更多