Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.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:无法将字符串转换为浮点_Python - Fatal编程技术网

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

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

我有:

其中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)
    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']