-4

我有:

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')

其中 file1 包含

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

得到

ValueError: could not convert string to float: 1

我不太明白为什么我会出错,请帮助我。提前致谢。

4

2 回答 2

1

那是因为文件的第一行是字母l,不能转换为浮点数。也许这是一个错字,你希望它是数字1?如果是这样,那么您的代码将是正确的。然后,您需要进行其他更改,以使您的代码更像 pythonwith用于处理文件:

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))
于 2013-09-29T17:48:46.973 回答
0

jabaldonedo 所说的,+split(' ')将您的大部分行拆分为多个项目的列表,而不仅仅是 2,因为每行包含多个空格而不仅仅是一个。

例如:

>>> '2   0.1'.split(' ')
['2', '', '', '0.1']

所以items[1]绝对不会给你你需要的东西。

items一个快速的解决方案是简单地采用by doing的最后一个元素items[-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']

注意:我使用的是交互式 Python,以防您想知道>>>前缀。

更新:( '2 0.1'.split()split()没有参数)似乎做同样的工作;即它摆脱了多个空间,可以这么说。(谢谢,@hcwhsa)。

于 2013-09-29T17:50:38.287 回答