我有一个名为" 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
我做错了什么?
答案 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]
这样您就不必担心空白行,并且您可以从string
到float
正确转换
答案 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