读取文本文件并将字符串转换为float

时间:2016-03-31 20:57:59

标签: python python-2.7 ubuntu-14.04

我有一个名为" foo.txt"的文本文件,其中包含一个数字列表,每行一个,例如:

0.094195
0.216867
0.326396
0.525739
0.592552
0.600219
0.637459
0.642935
0.662651
0.657174
0.683461

我现在想将这些数字读入Python列表。我这样做的代码如下:

x = []
file_in = open('foo.dat', 'r')
for y in file_in.read().split('\n'):
    x.append(float(y))

但这给了我错误:

ValueError: could not convert string to float

我做错了什么?

7 个答案:

答案 0 :(得分:3)

修改

martineau评论: 您还可以使用if y:来消除None或空字符串。

原始答案:

由于您使用换行符作为分隔符而失败,因此最后一个元素是空字符串

您可以添加y.isdigit()来检查y是否为数字。

x = []
file_in = open('sample.csv', 'r')
for y in file_in.read().split('\n'):
    if y.isdigit():
        x.append(float(y))

OR

您可以将read().split("\n")更改为readlines()

OR

从y中删除前导/尾随字符。它处理带有额外空格的行

for y in file_in:
    trimed_line = y.strip()  # leading or trailing characters are removed

答案 1 :(得分:2)

这种方法怎么样:

x = []
with open('foo.dat', 'r') as f:
    for line in f:
        if line: #avoid blank lines
            x.append(float(line.strip()))

或者:

with open('foo.dat', 'r') as f:
    lines = (line.strip() for line in f if line)
    x = [float(line) for line in lines]

最后更紧凑:

with open('foo.dat', 'r') as f:
    x = [float(line.strip()) for line in lines if line]

这样您就不必担心空白行,并且您可以从stringfloat正确转换

答案 2 :(得分:1)

通常文件末尾有空行,所以你可能正在尝试将空字符串转换为浮动。

而不是file_in.read().split('\n')你可以使用:

for line in file_in.readlines():
  x.append(float(line))

方法readlines返回给定文件中所有行的列表,并跳过最后一个空行(如果存在)。

答案 3 :(得分:1)

您可以尝试使用默认的浮动功能

>>> float("1.1")
1.1

您也可以尝试使用python try else语句来运行代码,直到它捕获错误并运行else语句。

try:
   try_this(whatever that might bring up a error)
except SomeException as exception:
   #Handle exception
else:
   return something

可能存在文件的空行末尾可能会产生错误。请尝试使用try else语句。

答案 4 :(得分:0)

我认为你是这样的字符串: '0.1111,0.1111'或其他

file_in = open('foo.dat', 'r')
for y in file_in.readlines()[0]:
    x.append(float(y))

答案 5 :(得分:0)

您可以使用函数来判断您正在解析的字符串是否为数字。根据这个问题1,您可以这样做:

def is_number(s):
try:
    float(s)
    return True
except ValueError:
    return False

x = []
file_in = open('foo.dat', 'r')
for y in file_in.read().split('\n'):
    if is_number(y):
        x.append(float(y))

答案 6 :(得分:0)

你可以这样使用

注意:reedline()是一个字符串,reedlines()是一个列表

file_in = open('foo.dat', "r")
r  =  file_in.readlines()
file_in.close()
l = 0
x = []
while l < len(r) :
    floating = float(r[l])
    x.append(floating)
    l += 1