Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.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_String_Decimal - Fatal编程技术网

Python-将字符串中的负小数转换为浮点

Python-将字符串中的负小数转换为浮点,python,string,decimal,Python,String,Decimal,我需要读入大量的.txt文件,每个文件都包含一个十进制数(一些是正的,一些是负的),然后将它们附加到2个数组中(基因型和表型)。随后,我希望在scipy中对这些数组执行一些数学运算,但是负('-')符号会导致问题。具体来说,我无法将数组转换为float,因为'-'被读取为字符串,导致以下错误: ValueError: could not convert string to float: 以下是我目前编写的代码: import linecache gene_array=[] phen_arra

我需要读入大量的.txt文件,每个文件都包含一个十进制数(一些是正的,一些是负的),然后将它们附加到2个数组中(基因型和表型)。随后,我希望在scipy中对这些数组执行一些数学运算,但是负('-')符号会导致问题。具体来说,我无法将数组转换为float,因为'-'被读取为字符串,导致以下错误:

ValueError: could not convert string to float:
以下是我目前编写的代码:

import linecache

gene_array=[]
phen_array=[]

for i in genotype:

   for j in phenotype:

      genotype='/path/g.txt'
      phenotype='/path/p.txt'

      g=linecache.getline(genotype,1)
      p=linecache.getline(phenotype,1)

      p=p.strip()
      g=g.strip()

      gene_array.append(g)
      phen_array.append(p)

  gene_array=map(float,gene_array)
  phen_array=map(float,phen_array)
在这一点上,我相当确定是负面迹象导致了问题,但我不清楚原因。这里的问题是我使用Linecache吗?有没有更好的替代方法

结果

print gene_array


错误消息中没有任何内容表明问题出在
-
。最可能的原因是
gene_array
和/或
phen_array
包含空字符串(
'

如文档中所述,
linecache.getline()

将在出现错误时返回
(找到的行将包含终止换行符)


这个问题绝对不是负面的。Python可以毫无问题地转换带负号的字符串。我建议您针对float RegEx运行每个条目,看看它们是否都通过了。

从错误消息中可以看出,问题似乎是空字符串或空格

ValueError: could not convert string to float:
要使其工作,请将地图转换为列表

gene_array=[float(e) for e in gene_array if e]
phen_array=[float(e) for e in phen_array if e]
用空字符串表示

float(“”
float(“”
将给出值错误,因此如果
gene\u数组
phen\u数组
中的任何项都有空格,这将在转换为float时引发错误

可能有很多原因导致像这样的空字符串

  • 空行还是空行
  • 开头或结尾的空行

您必须显示您试图读取的实际数据。像
“-123.45”
这样的字符串可以
浮点数
,但是
“-123.45”
不能。你能打印
基因数组和
phen数组吗?也许您的文本文件是空的,您试图
float
一个空字符串?我怀疑这是您的实际代码-在当前形式下,当您在循环内部定义变量时,它会在
for I in genetic
上抛出UnboundLocalError;另外,你从来没有在任何地方使用过
i
j
。@jr:你也可以打印
phen\u数组
?我可以
map(float,gene\u数组)
很好……你能解释一下“g和/或p末尾的空字符串”是什么意思吗?每个字符串的结尾都有一个空字符串--在开头和结尾都有一个空字符串。。。OP只是在读第1行(一遍又一遍),这是可疑的…p=p.strip()(etc)应该处理好空白,不是吗?@mgilson:我的措辞很糟糕。我的意思是
gene\u array
phen\u array
,我说的是
g
p
@NPE--啊,我现在跟着。是的,一个空字符串可能会有问题——但我不知道OP使用linecache的方式会有什么问题(除非文件中不存在该行)。无论如何,OP似乎对我们并不完全诚实……:)不需要做
条带
,它已经在生成原始列表时完成了。@markransem:同意我错过了那部分谢谢-这就成功了。是的,为了可读性,我必须压缩代码。非常感谢!
gene_array=[float(e) for e in gene_array if e]
phen_array=[float(e) for e in phen_array if e]