2016-05-10 4 views
1

Ich habe eine Reihe von Strings, die ich formatieren möchte, um die Zeichenfolge auf 5 Zeichen zu halten. Ich verwende eine Zeile wie diese (die Original-Zeichenketten sind manchmal 5 Zeichen, manchmal 6):String-Formatierung, Trimmen von rechts statt von links

ram1 = ram1.astype('|S5') 

Doch diese dreht

039410 

In

39410 

Wenn ich will es zu sein

03941 

Gibt es eine einfache Möglichkeit, meine Codezeile zu reparieren?

Prost!

+0

funktioniert gut tun, welche Version von numpy? –

+0

Strings haben keinen 'Asttyp', Ihr Beispiel funktioniert nicht. –

+0

@StefanPochmann, numpy tut –

Antwort

4

können Sie format verwenden:

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

wo die Charaktere nach : das Format beschreiben (0 gepolsterte 5 Zeichen langen String).

Sie können auch zfill verwenden:

print ram1.zfill(5) 
## 03941 

Im Fall benötigen Sie eine Zeichenfolge kürzen, können Sie das folgende Format verwenden:

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

@PadraicCunningham oops, ich weiß nicht, wie ich das verpasst habe. Vielen Dank. Es ist jetzt korrigiert. –

-1

, wenn der String-Länge nicht weniger als 5 Zeichen ist dann können Sie den folgenden Code verwenden

a = "abcdef" 

print a[0:5] 
3

Da Sieerwähnt habenerscheint ram ein NumPy-Array.

Um all 0 s von der richtigen Größe jeden Wert zu entfernen, verwenden np.char.rstrip:

np.char.rstrip(ram, '0') 

für jeden Wert,

ram.astype('|S5') 

genügen nur das erste 5 Bytes zu bewahren.


Zum Beispiel

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'] 

Als Padraic Cunningham points out, wenn Sie ein Array von Strings haben:

In [209]: ram = np.array(['039410', '123456', '00000']).astype('|S6'); ram 
Out[209]: 
array([b'039410', b'123456', b'00000'], 
     dtype='|S6') 

und die Saiten zu Ints konvertieren, verlieren Sie Nullen auf die links:

In [210]: ram.astype(int) 
Out[210]: array([ 39410, 123456,  0]) 

Verwenden Sie also nicht astype(int), wenn Sie die ersten 5 Bytes der Zeichenfolge beibehalten möchten.

+0

'np.array (['039410']). Astype (" | S5 ")' funktioniert nicht? –

+0

@PadraicCunningham: Ups, du hast Recht. – unutbu

+0

Ich werde dann nicht verrückt, welcher ursprüngliche dtype würde es nicht funktionieren lassen? –

1

Wenn Sie mit numpy Array mit String arbeiten, funktioniert astype gut.

string = np.array('039410') 
print string   
## 039410 
string = string.astype('|S5') 
print string 
## 03941 

Wenn Sie an einer Liste von Zeichenfolgen arbeiten, sollten Sie dies tun.

str_list = ['039410'] 
index = 0 
for i in str_list: 
    i = i[:5] 
    str_list[index] = i 
    index += 1 
print str_list 
## ['03941'] 

Wenn Sie auf einzelne Zeichenfolge arbeiten, dann müssen Sie ihn nur für mich

str_num = '039410' 
str_num = str_num[:5] 
print str_num 
## '03941' 
Verwandte Themen