2016-05-10 2 views
1

У меня есть набор строк, которые я хочу форматировать, чтобы строка содержала 5 символов. Я использую такую ​​строку (оригинальные строки иногда бывают 5 символов, иногда 6):Форматирование строк, обрезка справа, а не слева

ram1 = ram1.astype('|S5') 

Однако это превращает

039410 

В

39410 

Когда я хочу это должно быть

03941 

Есть ли простой способ исправить мою строку кода, чтобы сделать это?

Cheers!

+0

работает для меня, какая версия NumPy? –

+0

Строки не имеют 'astype', ваш пример не работает. –

+0

@StefanPochmann, numpy делает –

ответ

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 oops, я не знаю, как я пропустил это. Благодарю. Теперь он исправлен. –

-1

, если длина строки не менее 5 символов то вы можете использовать приведенный ниже код

a = "abcdef" 

print a[0:5] 
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]) 

Так что не используйте astype(int), если вы хотите сохранить первые 5 байтов строки.

+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' 
Смежные вопросы