字符串格式,从右边而不是左边修剪

时间:2016-05-10 20:35:14

标签: python numpy

我有一组字符串,我想格式化以保持字符串为5个字符。我使用这样的一行(原始字符串有时是5个字符,有时是6个字符):

ram1 = ram1.astype('|S5')

然而,这转变

039410

39410

当我想要它时

03941

有没有一种简单的方法来修复我的代码行来执行此操作?

干杯!

4 个答案:

答案 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]