我看不懂负值

时间:2014-01-19 01:59:21

标签: python python-2.7

我有一个数据集如下,它包含一些负值。我已经编写了代码来读取这些值。但当任何负数百分比。它给出了错误。文件格式如下

   1SOL    HW1    2   1.4788   2.7853  -0.7702
   1SOL    HW2    3   1.4640  -2.8230   0.6243
   2SOL     OW    4  -1.5210   0.9510  -2.2050
   2SOL    HW1    5   1.5960  -0.9780   2.1520

我编写的代码如下。我正在使用for循环,如果函数选择P [3],P [4],P [5]位置。

X=[]
  P = line.split()
  x = float(P[3]) `#then I collect these numbers in to array like X = []`
  X.append(x)

如果没有负值,此代码可以正常工作。

然后我使用以下函数将X写入另一个文件。但它不起作用

A.write('%s\n' % (X)) `# this is not working since it X is Float. File open as A to write`

请有人帮我纠正我的电线。

2 个答案:

答案 0 :(得分:1)

A.write('%s\n' % (X))无效的原因与Xfloat无关。

可能是一个问题,因为(X)不是您想象的浮动的tuple,它只是float。逗号构成一个元组,而不是括号。特别是,逗号分隔的值,如果它们没有其他含义(函数参数,列表成员等),则为tuple。当逗号分隔的值具有另一含义时,括号仅用于消除tuple的歧义。这通常简单直观,但这意味着在单元素元组的情况下,您需要编写(X,)

但是,即使这不应该是一个问题:'%s\n' % 3.2'3.2\n'

最重要的是,X首先不是float,而是list。您明确将其创建为X = [],然后append将每个float编辑为它。同样,这不是问题,但这意味着您可能无法获得想要的输出。这只是猜测,因为您从未解释过您想要的输出或实际获得的输出。但'%s\n' % [3.2, 3.4]'[3.2, 3.4]\n'。如果你想让每一个都在一个单独的行上,你必须明确地或隐含地循环它们 - 也许''.join('%s\n' % x for x in X)


至于为什么你的负数不起作用,有很多可能性,如果没有更多的信息,就不可能猜出哪一个,但这里有一些例子:

  • Python(更具体地说,split())在-和数字之间有一些东西,即使它看起来不像你。因此,您尝试将"-"转换为浮点数而不是"-12345"
  • 那些明显的-字符实际上是Unicode减号而不是连字符,或其他类似的字符。 .decode - 使用正确的编码对文件进行解决可能会解决问题,但这可能还不够。
  • -和第一个数字之间有不可见的非间距字符。也许是Unicode,或者只是一个控制角色。

在许多情况下,异常字符串(您未向我们展示)将显示字符串的repr,这可能会显示此信息。如果没有,您可以print repr(P[3])明确。如果仍然没有帮助,请尝试print binascii.hexlify(P[3])(当然,您首先必须import binascii。)

答案 1 :(得分:0)

无法确定哪些内容有效,因为我们无法看到您的源文件,但您遇到的问题是split函数。如果我是你,我会尝试P = line.split('\t')并查看是否能解决您的问题。