我有一組字符串,我想要格式化字符串以保留5個字符。我用這樣的線(原字符串有時是5個字符,有時6):字符串格式化,從右而不是左對齊
ram1 = ram1.astype('|S5')
然而,這原來
039410
進入
39410
當我想它是
03941
有沒有簡單的方法來修復我的代碼行來做到這一點?
乾杯!
我有一組字符串,我想要格式化字符串以保留5個字符。我用這樣的線(原字符串有時是5個字符,有時6):字符串格式化,從右而不是左對齊
ram1 = ram1.astype('|S5')
然而,這原來
039410
進入
39410
當我想它是
03941
有沒有簡單的方法來修復我的代碼行來做到這一點?
乾杯!
您可以使用format
:
ram1 = '3941'
print '{0:0>5s}'.format(ram1)
## 03941
其中:
後的字符描述格式(填充0 5個字符的字符串)。
您還可以使用zfill
:
print ram1.zfill(5)
## 03941
如果您需要截斷你的字符串,可以使用以下格式:
print '{:.5s}'.format('039410')
## 03941
@PadraicCunningham哎呀,我不知道我怎麼錯過了。謝謝。現在它已被糾正。 –
如果字符串長度不小於5個字符那麼你可以使用下面的代碼
a = "abcdef"
print a[0:5]
既然你提到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)
。
'np.array(['039410'])。astype(「| S5」)'不適用? –
@PadraicCunningham:哎呀,你說得對。 – unutbu
我不會生氣,那麼原始的dtype會使它無法工作? –
如果您正在使用包含字符串的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'
正常工作對我來說,numpy的是什麼版本? –
字符串沒有'astype',你的例子不起作用。 –
@StefanPochmann,numpy does –