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

Python 将字符串转换为浮点时出错

Python 将字符串转换为浮点时出错,python,Python,我在编写python脚本时遇到困难。具体地说,我有一个数字字符串,希望用整数0替换单词“零”。然后我想把这个字符串转换成浮点值。我使用了data.replace,因此必须将“”放在0的周围-如果没有,则会出现错误,因为它需要一个字符缓冲区对象。在转换为浮点之前,我可以从0中去掉“”这句话对吗 > for data in inFile: > data = data.replace ("zero", "0") > data = map(float,data.strip('

我在编写python脚本时遇到困难。具体地说,我有一个数字字符串,希望用整数0替换单词“零”。然后我想把这个字符串转换成浮点值。我使用了data.replace,因此必须将“”放在0的周围-如果没有,则会出现错误,因为它需要一个字符缓冲区对象。在转换为浮点之前,我可以从0中去掉“”这句话对吗

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

>  data = map(float,data.strip('"'))                                                            
ValueError:无法将字符串转换为浮点值: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
非常感谢


另外,如果这不够明确,我真的很抱歉。我对编程和堆栈溢出非常陌生

以下是一些建议

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

显示一个输入示例数据文件中似乎有散乱的字符。您能更清楚地了解转换吗?您不需要去除
您可以打印数据并告诉我们
data=data之后的数据值是多少。替换(“零”、“0”)
请您的问题进行改进。