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