Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:ValueError:无法将字符串转换为浮点:';0';_Python_Python 3.x_Matplotlib_Pylot - Fatal编程技术网

Python:ValueError:无法将字符串转换为浮点:';0';

Python:ValueError:无法将字符串转换为浮点:';0';,python,python-3.x,matplotlib,pylot,Python,Python 3.x,Matplotlib,Pylot,对于一些学校作业,我一直试图让pyplot根据Logger Pro的数据为我绘制一些科学图表。我遇到了这个错误 ValueError: could not convert string to float: '0' 以下是节目: plot.py ------------------------------- import matplotlib.pyplot as plt import numpy as np infile = open('text', 'r') xs = [] ys = [

对于一些学校作业,我一直试图让pyplot根据Logger Pro的数据为我绘制一些科学图表。我遇到了这个错误

ValueError: could not convert string to float: '0'
以下是节目:

plot.py
-------------------------------
import matplotlib.pyplot as plt 
import numpy as np

infile = open('text', 'r')

xs = []
ys = []

for line in infile:
    print (type(line))
    x, y = line.split()
    # print (x, y)
    # print (type(line), type(x), type(y))

    xs.append(float(x))
    ys.append(float(y))

xs.sort()
ys.sort()

plt.plot(xs, ys, 'bo')
plt.grid(True)

# print (xs, ys)

plt.show()

infile.close()
Traceback (most recent call last):
  File "\route\to\the\file\plot01.py", line 36, in <module>
    xs.append(float(x))
ValueError: could not convert string to float: '0'
输入文件包含以下内容:

text
-------------------------------
0 1.33
1 1.37
2 1.43
3 1.51
4 1.59
5 1.67
6 1.77
7 1.86
8 1.98
9 2.1
这是我在运行程序时收到的错误消息:

plot.py
-------------------------------
import matplotlib.pyplot as plt 
import numpy as np

infile = open('text', 'r')

xs = []
ys = []

for line in infile:
    print (type(line))
    x, y = line.split()
    # print (x, y)
    # print (type(line), type(x), type(y))

    xs.append(float(x))
    ys.append(float(y))

xs.sort()
ys.sort()

plt.plot(xs, ys, 'bo')
plt.grid(True)

# print (xs, ys)

plt.show()

infile.close()
Traceback (most recent call last):
  File "\route\to\the\file\plot01.py", line 36, in <module>
    xs.append(float(x))
ValueError: could not convert string to float: '0'
回溯(最近一次呼叫最后一次):
文件“\route\to\the\File\plot01.py”,第36行,在
追加(浮动(x))
ValueError:无法将字符串转换为浮点:“0”

您的数据文件中有一个UTF-8 BOM;这就是我的Python 2交互式会话状态被转换为浮点的状态:

>>> '0'
'\xef\xbb\xbf0'
\xef\xbb\xbf
字节是UTF-8编码的,通常用作字节顺序标记,尤其是Microsoft产品。UTF-8没有字节顺序问题,不需要像UTF-16或UTF-32那样记录字节顺序;相反,微软用它来辅助检测编码

在Python3上,可以使用
utf-8-sig
编解码器打开文件;此编解码器在开始时需要BOM表,并将其删除:

infile = open('text', 'r', encoding='utf-8-sig')
在Python2上,可以使用检测和剥离

for line in infile:
    if line.startswith(codecs.BOM_UTF8):
        line = line[len(codecs.BOM_UTF8):]
    x, y = line.split()
作为:

由于UTF-8是一种8位编码,因此不需要BOM,解码字符串中的任何
U+FEFF
字符(即使是第一个字符)都被视为
零宽度无中断空间

如果没有外部信息,就不可能可靠地确定用于编码字符串的编码。每个字符映射编码都可以对任意随机字节序列进行解码。然而,这在UTF-8中是不可能的,因为UTF-8字节序列具有不允许任意字节序列的结构。为了提高检测UTF-8编码的可靠性,微软为其记事本程序发明了一种UTF-8变体(Python 2.5称之为“UTF-8-sig”):在将任何Unicode字符写入文件之前,先创建一个UTF-8编码的BOM(这看起来像是一个字节序列:
0xef
0xbb
0xbf
)被写入。因为任何charmap编码的文件都不可能以这些字节值开始(例如,映射到

LATIN SMALL LETTER I WITH DIAERESIS
RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
INVERTED QUESTION MARK
在iso-8859-1中),这增加了从字节序列中正确猜测
utf-8-sig
编码的可能性。因此,在这里,BOM不能用来确定用于生成字节序列的字节顺序,而是作为有助于猜测编码的签名。编码时
utf-8-sig
编解码器将写入
0xef
0xbb
0xbf
作为文件的前三个字节。解码时,如果这三个字节作为文件的前三个字节出现,utf-8-sig将跳过这三个字节。在utf-8中,不鼓励使用BOM,通常应避免使用


@EmilLykkeDiget:你在使用Python 3吗?我忘了写这个了;是的,我在使用Python 3。简单但有效;很有效!非常感谢!在编辑过程中,我似乎已经销毁了证据。BOM字节不再出现在帖子中,甚至在原始版本中也不会出现。谢谢,Stack!(啊哼)。我想这很好。。。