Python ValueError:无法将字符串转换为浮点
我有: 其中file1包含Python ValueError:无法将字符串转换为浮点,python,Python,我有: 其中file1包含 data1=open('file1.txt','r') data2=open('file2.txt','w+') for line in data1.readlines(): items = line.split(' ') x = log(float(items[0])) y = float(items[1]) data2.write(x) data2.write('\t') data2.write(y) da
data1=open('file1.txt','r')
data2=open('file2.txt','w+')
for line in data1.readlines():
items = line.split(' ')
x = log(float(items[0]))
y = float(items[1])
data2.write(x)
data2.write('\t')
data2.write(y)
data2.write('\n')
得到
l 0.1
2 0.1
3 0.1
4 0.1
5 0.1
6 0.1
7 0.1
8 0.1
9 0.1
10 0.1
我不太明白为什么我会出错,请帮助我。
提前感谢。这是因为文件的第一行是字母
l
,无法转换为浮点数。也许是打字错误,你希望它是数字1
?如果是这样,那么您的代码将是正确的。然后,您需要进行其他更改,以使代码更具python风格,如使用with
处理文件:
ValueError: could not convert string to float: 1
正如jabaldonedo所说,+
split(“”)
将您的大多数行拆分为多个项目的列表,而不仅仅是2个,因为每行包含多个空格,而不仅仅是一个空格
例如:
from math import log
txt = list()
with open('file1.txt', 'r') as fr, open('file2.txt', "w+") as fw:
for line in fr:
items = line.split()
txt.append("{0}\t{1}".format(items[0], log(float(items[1]))))
fw.write("\n".join(txt))
因此,项目[1]
肯定不会满足您的需求
一个快速的解决方案是通过执行items[-1]
简单地获取items
的最后一个元素。但最好正确地进行拆分(即使用正则表达式):
或者,如果您不想使用正则表达式,另一个稍微不雅观的解决方法是:
>>> import re
>>> re.split(' +', '2 0.1'.split(' '))
['2', '0.1']
注意:我正在使用交互式Python,以防您对>>
前缀感到疑惑
更新:
'20.1'。split()
(即没有参数的split()
)似乎做完全相同的工作;i、 可以说,它去掉了多个空格。(谢谢,@hcwhsa)。你能发布完整的错误消息吗?文件的第一行是否有l或是打字错误?至少要发布正确的回溯:ValueError:无法将字符串转换为float:l
full Error message x=log(float(items[0])ValueError:无法将字符串转换为float:lAnd OP应该使用line.split()
不行。拆分(“”)
,否则它们将再次得到相同的错误,但这次是空字符串。OP显然没有将日志
应用到项
中的每个项,以及为什么文件。读取行
?对于fr:
中的行更好。欢迎您,记住,在SO中表达感谢的最好方式是向上投票/接受答案:)对不起,我又看了一遍,我想我仍然需要一些帮助。如果我想记录第一列并保持第二列不变,该怎么办?这样:log(float(items[0]),items[1]只'20.1'。split()
就足够了。看来你是对的-split(“20.1”)
给出了['2',0.1']
。。。我不知道;一点也不直观:)
>>> import re
>>> re.split(' +', '2 0.1'.split(' '))
['2', '0.1']
>>> items = '2 0.1'.split(' ')
>>> items = [x for x in items if x]
>>> items
['2', '0.1']