【问题标题】:Importing a text file gives error导入文本文件会出错
【发布时间】:2015-05-27 15:56:57
【问题描述】:

我有一个包含以下数据的文本文件:

5298    10036   4   360 8
6128    11947   2   385 7
9472    18930   0   233 4
5056    9790    1   293 6

我使用以下代码读取此文件:

file1 = open("test.txt","r")
lines = file1.readlines()       
BF=[map(float, line.split()) for line in lines]

这给了我以下错误:

could not convert string to float: ÿþ5

为什么我会看到这个错误?

更新:

print lines 

显示:

['\xff\xfe5\x002\x009\x008\x00\t\x001\x000\x000\x003\x006\x00\t\x004\x00\t\x003\x006\x000\x00\t\x008\x00\r\x00\n', '\x006\x001\x002\x008\x00\t\x001\x001\x009\x004\x007\x00\t\x002\x00\t\x003\x008\x005\x00\t\x007\x00\r\x00\n', '\x009\x004\x007\x002\x00\t\x001\x008\x009\x003\x000\x00\t\x000\x00\t\x002\x003\x003\x00\t\x004\x00\r\x00\n', '\x005\x000\x005\x006\x00\t\x009\x007\x009\x000\x00\t\x001\x00\t\x002\x009\x003\x00\t\x006\x00\r\x00\n', '\x001\x005\x000\x006\x004\x00\t\x003\x000\x001\x006\x000\x00\t\x001\x00\t\x003\x001\x002\x00\t\x008\x00']

【问题讨论】:

  • 我觉得你有utf-8 BOM,试试file1 = open("test.txt","r", "utf-8")
  • 我无法使用该文件内容重现此错误。您确定您的文件中没有任何其他非数字字符吗?
  • 您会看到,因为您在文件中的某处有文本ÿþ5,并且无法将其解析为浮点数。您应该将聚合更改为循环并使用try/except 处理此类情况。
  • 其实我觉得是utf-16试试file1 = open("test.txt","r", "utf-16")

标签: python string file-io floating-point readlines


【解决方案1】:

您有一个utf-16 BOM,这是0xFE 0xFF 被解释为ÿþ,您需要打开文件并传递编码。

file1 = open("test.txt","r", encoding = "utf-16")

当你使用 python 2 时,你可以试试这个:

import io
file1 = io.open("test.txt","r", encoding = "utf-16")

【讨论】:

  • 嗨,这给了我以下错误:TypeError: 'encoding' is an invalid keyword argument for this function
  • 试试这个:file1 = open("test.txt","r", "utf-16")
  • 你用的是什么版本的python?
  • 试试import io file1 = io.open("test.txt","r", encoding = "utf-16")
  • Pyhton 版本:2.7.6 | 32-bit Tried io: 读取文件,但当我打印“行”时,我得到以下信息: [u'5298\t10036\t4\t360\t8\n', u'6128\t11947\t2\t385\t7 \n', u'9472\t18930\t0\t233\t4\n', u'5056\t9790\t1\t293\t6\n', u'15064\t30160\t1\t312\t8']
【解决方案2】:
import io
file1 = io.open("test.txt","r",encoding='utf-16')
lines = file1.readlines()
BF=[map(float, line.split()) for line in lines]
print BF

结果:

[[5298.0, 10036.0, 4.0, 360.0, 8.0], [6128.0, 11947.0, 2.0, 385.0, 7.0], [9472.0, 18930.0, 0.0, 233.0, 4.0], [5056.0, 9790.0, 1.0, 293.0, 6.0]]

【讨论】:

    【解决方案3】:

    如果每一行都可能在末尾包含一个换行符,为什么不为每一行打印 line.split() ;只是为了确认数字是否正确拆分......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-09
      • 2016-01-03
      • 2013-07-17
      相关资源
      最近更新 更多