我有一个数据集如下,它包含一些负值。我已经编写了代码来读取这些值。但当任何负数百分比。它给出了错误。文件格式如下
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`
请有人帮我纠正我的电线。
答案 0 :(得分:1)
A.write('%s\n' % (X))
无效的原因与X
为float
无关。
可能是一个问题,因为(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)
。
至于为什么你的负数不起作用,有很多可能性,如果没有更多的信息,就不可能猜出哪一个,但这里有一些例子:
split()
)在-
和数字之间有一些东西,即使它看起来不像你。因此,您尝试将"-"
转换为浮点数而不是"-12345"
。-
字符实际上是Unicode减号而不是连字符,或其他类似的字符。 .decode
- 使用正确的编码对文件进行解决可能会解决问题,但这可能还不够。-
和第一个数字之间有不可见的非间距字符。也许是Unicode,或者只是一个控制角色。在许多情况下,异常字符串(您未向我们展示)将显示字符串的repr
,这可能会显示此信息。如果没有,您可以print repr(P[3])
明确。如果仍然没有帮助,请尝试print binascii.hexlify(P[3])
(当然,您首先必须import binascii
。)
答案 1 :(得分:0)
无法确定哪些内容有效,因为我们无法看到您的源文件,但您遇到的问题是split
函数。如果我是你,我会尝试P = line.split('\t')
并查看是否能解决您的问题。