将字符串转换为float时出错

时间:2016-12-06 12:03:50

标签: python

我在编写python脚本时遇到了麻烦。具体来说,我有一串数字,并希望替换“零”'''''使用整数0.我想将此字符串覆盖为浮点值。我使用了data.replace,因此必须放置""在0附近 - 如果没有,因为它需要一个字符缓冲区对象。我是说得对,我可以去掉""从转换到浮点数之前的0?

>  for data in inFile: 
>  data = data.replace ("zero", "0")

>  data = map(float,data.strip('"'))                                                            
  

ValueError:无法将字符串转换为float:s

它是一个更大的脚本的一部分,它接受一个值列表。我想从前100个中减去给定行的最后100个值。

inFile = gzip.open('path','rb')

inpNorm = 0.5
samNorm = 1

inFile.next()
for line in inFile:
        cols = line.strip().split('\t')
        data = cols[6:]
        for data in inFile:
                data = data.replace("zero",0)
        data = map(float,data.strip('"'))

        inputVals = [x * inpNorm for x in data[:100]]
        h3k27Vals = [x * samNorm for x in data[100:]]

        normVals = [h327Vals[i] - inputVals[i] for i in len(inputVals)]

        print '\t'.join(cols[:6]) + '\t'.join(map(str,normVals))

inFile.close()

我的输入文件如下所示:

C8098283        1       8268    asx1.1_ox1.0.loc.00001  .       +  zero    zero    zero    11.701  12.801   13.91

非常感谢

P.S。如果这不够明确,真的很抱歉。我是编程和堆栈溢出的新手。

1 个答案:

答案 0 :(得分:0)

以下是一些建议。

line = "8268    asx1.1_ox1.0.loc.00001  .       +  zero    zero    zero    11.701  12.801   13.91"
print("Input: '{}'".format(line))

converted_line = "0".join(line.split('zero')) # Split the line where you have 'zero' and rebuild the string with '0'
print("Converted line: '{}'".format(converted_line))

你说你想转换价值。该行中有几个非浮动条目,但最后6个值似乎很有趣。我通常通过以下方式解压缩值:

v1, v2, v3, v4, v5, v6 = map(float, converted_line.rstrip().split()[4:])
# .split() with no argument splits on whitespace
# .rstrip() is to remove trailing '\n' (newlines), which are common when parsing files
print("Data:", v1, v2, v3, v4, v5, v6)

当然,您也可以将其存储在数组中(即data = map(float, converted ...))。一起运行产生输出

Input: '8268    asx1.1_ox1.0.loc.00001  .       +  zero    zero    zero    11.701  12.801   13.91'
Converted line: '8268    asx1.1_ox1.0.loc.00001  .       +  0    0    0    11.701  12.801   13.91'
Data: 0.0 0.0 0.0 11.701 12.801 13.91

另外,要解决您的实际问题。现在你想要从文件中的不同位置读取彼此(即你想要0 -> 100, 1 -> 101, 2 -> 102等)。这有点麻烦,并没有那么高效。如果你的文件大小不是太大(可能是<1M行或某事),我建议你读完整个文件,进行计算,然后用数据做你想做的事。在像

这样的伪代码中
col1 = []
col2 = []
...

for line in file.readlines(): 
    v1, v2, ... = map(float, converted_line.rstrip().split()[...])
    col1.append(v1)
    col2.append(v2)
    ...

# Now do your data manipulation of the parsed data that you find in `col1`, `col2`, etc