2016-05-10 44 views
1

我有一个代码,在对它们进行一些数学运算后输出一大堆数字。在代码中的一点,它们被numpy.rint四舍五入,并且在某些情况下(我相信当一个9被舍入到10时),我最终得到一个我不想要的尾部零。我有一些代码,看起来有点,像这样的将字符串格式化为Python中的某些字符限制

ra3n = ra3/60 * 10 
ra3n = np.rint(ra3n) 
ra3n = ra3n.astype(str) ##there is a good reason that this needs to be a string 

我需要的所有导致ra3n的是5个字符长,但偶尔一个弹出长达6个字符。我将如何正确格式化?请记住我是一个总的python小白,所以我可能会需要它阐明了我=)

编辑:

这里是我的输出:

00244-2451 
00244-2702 
00278-0629 
00286-1614 
00295-1101 
002910-0546 
00303+0711 
00305+2246 
00348+2604 
003410+0423 
00355-0204 
00359+1236 
00360-0931 
00386-1210 

那里有六位数字的情况下,在字符串的前半部分而不是5个是错误的;那些尾随零不应该在那里。

+0

'ra3n.astype('| S5') '? – ayhan

+0

尝试过,但没有奏效。 – uhurulol

回答

2

ra3n = ra3n[:-1] if ra3n[-1] == '0' else ra3n

有可能是一个更好的解决办法,但我不知道我真的能理解你的问题,没有看到一些输出。

+0

用我的输出编辑。 – uhurulol

2

您更改ra3n的类型,这是不好的编程习惯。尝试这个。

ra3n = format(ra3/60.*10., '5f')[:5] 

这给出了5个字符。请注意,如果字符串通常为六个字符,则会切断最后一个字符,无论是好还是坏。另请注意,我在60和10数字中包含了小数点:这保证将使用浮点除法,而不是使用整数除法,如果这是在Python 2中完成的话。

+0

好的,很酷。我有一个问题,虽然:我使用numpy.loadtxt导入我的数组,我必须导入为“str”,因为有一堆不同的数据类型。所以我在你建议的那一行之前使用''ra3 = ra3.astype(float)'',但是它给了我''未知的格式代码'f',用于'str'''类型的对象, 。 – uhurulol

+0

@uhurulol:哎呀,我有一个错字:我写了'r13'而不是'ra3'。现在就试试。或者可以使用'format(float(ra3)/60.*10。,'5f')[:5]'。 –

+0

我弄错了,不用担心,但仍然不起作用>< – uhurulol