2016-05-10 54 views
1

我有一組字符串,我想要格式化字符串以保留5個字符。我用這樣的線(原字符串有時是5個字符,有時6):字符串格式化,從右而不是左對齊

ram1 = ram1.astype('|S5') 

然而,這原來

039410 

進入

39410 

當我想它是

03941 

有沒有簡單的方法來修復我的代碼行來做到這一點?

乾杯!

+0

正常工作對我來說,numpy的是什麼版本? –

+0

字符串沒有'astype',你的例子不起作用。 –

+0

@StefanPochmann,numpy does –

回答

4

您可以使用format

ram1 = '3941' 
print '{0:0>5s}'.format(ram1) 
## 03941 

其中:後的字符描述格式(填充0 5個字符的字符串)。

您還可以使用zfill

print ram1.zfill(5) 
## 03941 

如果您需要截斷你的字符串,可以使用以下格式:

print '{:.5s}'.format('039410') 
## 03941 
+1

@PadraicCunningham哎呀,我不知道我怎麼錯過了。謝謝。現在它已被糾正。 –

-1

如果字符串長度不小於5個字符那麼你可以使用下面的代碼

a = "abcdef" 

print a[0:5] 
3

既然你提到astype,看起來ram是一個NumPy數組。

從每個值的大小合適刪除所有0 S,使用np.char.rstrip

np.char.rstrip(ram, '0') 

爲了保護只是第5個字節爲每個值,

ram.astype('|S5') 

就足夠了。


例如,

import numpy as np 
ram = np.array(['039410', '123456', '00000']).astype('|S6') 
print(np.char.rstrip(ram, b'0')) 
# ['03941' '123456' ''] 

print(ram.view('|S5')) 
# ['03941' '12345' '00000'] 

作爲Padraic Cunningham points out,如果你有一個字符串數組:

In [209]: ram = np.array(['039410', '123456', '00000']).astype('|S6'); ram 
Out[209]: 
array([b'039410', b'123456', b'00000'], 
     dtype='|S6') 

和字符串轉換爲整數,你失去的零左:

In [210]: ram.astype(int) 
Out[210]: array([ 39410, 123456,  0]) 

因此,如果您希望保留字符串的前5個字節,請不要使用astype(int)

+0

'np.array(['039410'])。astype(「| S5」)'不適用? –

+0

@PadraicCunningham:哎呀,你說得對。 – unutbu

+0

我不會生氣,那麼原始的dtype會使它無法工作? –

1

如果您正在使用包含字符串的numpy數組,那麼astype將正常工作。

string = np.array('039410') 
print string   
## 039410 
string = string.astype('|S5') 
print string 
## 03941 

如果你正在處理字符串列表,那麼你應該這樣做。

str_list = ['039410'] 
index = 0 
for i in str_list: 
    i = i[:5] 
    str_list[index] = i 
    index += 1 
print str_list 
## ['03941'] 

如果你在一個字符串的工作,那麼你就必須做到這一點

str_num = '039410' 
str_num = str_num[:5] 
print str_num 
## '03941'