字符串格式,改为从右侧修剪

2024-10-04 15:29:08 发布

您现在位置:Python中文网/ 问答频道 /正文

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

ram1 = ram1.astype('|S5')

然而,这个转变

039410

进入

39410

当我想要的时候

03941

有没有一个简单的方法来修复我的代码行呢?你知道吗

干杯!你知道吗


Tags: 方法字符串代码个字符s5astype干杯ram1
3条回答

您可以使用format

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

其中:后面的字符描述格式(0填充的5字符长字符串)。你知道吗

也可以使用zfill

print ram1.zfill(5)
## 03941

如果需要截断字符串,可以使用以下格式:

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

既然您提到了astype,那么ram似乎是一个NumPy数组。你知道吗

要从每个值的正确大小中删除所有0,请使用^{}

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)。你知道吗

如果您使用的是包含字符串的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'

相关问题 更多 >

    热门问题