我有一组字符串,我想格式化以保持字符串为5个字符。我使用这样的一行(原始字符串有时是5个字符,有时是6个字符):
ram1 = ram1.astype('|S5')
然而,这转变
039410
向
39410
当我想要它时
03941
有没有一种简单的方法来修复我的代码行来执行此操作?
干杯!
答案 0 :(得分: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 :(得分:3)
由于您提到了astype
,因此ram
显示为NumPy数组。
要从每个值的正确大小中删除所有0
,请使用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)
。
答案 2 :(得分: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'
答案 3 :(得分:-1)
如果字符串长度不小于5个字符,那么您可以使用以下代码
a = "abcdef"
print a[0:5]