2016-05-10 53 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