Domanda

    

Questa domanda ha già una risposta qui:

    
            
  •              con zeri iniziali                                      17 risposte                          
  •     
    

Ho bisogno di aggiungere zeri iniziali a intero per fare una stringa con quantità definita di cifre ($ cnt). Quello che il modo migliore per tradurre questa semplice funzione da PHP a Python:

function add_nulls($int, $cnt=2) {
    $int = intval($int);
    for($i=0; $i<($cnt-strlen($int)); $i++)
        $nulls .= '0';
    return $nulls.$int;
}

C'è una funzione che può fare questo?

È stato utile?

Soluzione

È possibile utilizzare il metodo zfill() per riempire una stringa con zeri:

In [3]: str(1).zfill(2)
Out[3]: '01'

Altri suggerimenti

Il metodo standard è quello di utilizzare formato modificatori di stringa. Questi metodi stringa di formato sono disponibili nella maggior parte dei linguaggi di programmazione (tramite la funzione sprintf in c per esempio) e sono un utile strumento per conoscere.

i = random.randint(0,99999)
print "%05d" % i

che emette uno stringa di lunghezza 5.


Modifica: In python2.6 e, soprattutto, v'è anche:

print '{0:05d}'.format(i)

See: https://docs.python.org/2/library/string. html

Molto probabilmente solo bisogno di formattare il numero intero:

'%0*d' % (fill, your_int)

Ad esempio,

>>> '%0*d' % (3, 4)
'004'

Python 3.6 f-stringhe ci permette di aggiungere zeri iniziali facilmente:

number = 5
print(f' now we have leading zeros in {number:02d}')

Dai un'occhiata alla questo buon posto su questa funzione.

Python 2.6 permette questo:

add_nulls = lambda number, zero_count : "{0:0{1}d}".format(number, zero_count)

>>>add_nulls(2,3)
'002'

Per Python 3 e oltre: str.zfill () è ancora l'opzione più leggibile

Ma è una buona idea per esaminare il nuovo e potente str.format (), cosa succede se si vuole pad qualcosa che non è 0?

    # if we want to pad 22 with zeros in front, to be 5 digits in length:
    str_output = '{:0>5}'.format(22)
    print(str_output)
    # >>> 00022
    # {:0>5} meaning: ":0" means: pad with 0, ">" means move 22 to right most, "5" means the total length is 5

    # another example for comparision
    str_output = '{:#<4}'.format(11)
    print(str_output)
    # >>> 11##

    # to put it in a less hard-coded format:
    int_inputArg = 22
    int_desiredLength = 5
    str_output = '{str_0:0>{str_1}}'.format(str_0=int_inputArg, str_1=int_desiredLength)
    print(str_output)
    # >>> 00022

Hai almeno due opzioni:

  • str.zfill: lambda n, cnt=2: str(n).zfill(cnt)
  • Formattazione %: lambda n, cnt=2: "%0*d" % (cnt, n)

Se su Python> 2.5, vedere una terza opzione di risposta di clorz.

alternativa One-liner per il built-in zfill.

Questa funzione prende x e lo converte in una stringa, e aggiunge zeri all'inizio solo e soltanto se la lunghezza è troppo breve:

def zfill_alternative(x,len=4): return ( (('0'*len)+str(x))[-l:] if len(str(x))<len else str(x) )

Per riassumere - build-in:. zfill è abbastanza buono, ma se qualcuno è curioso su come implementare questo a mano, qui è un esempio più

Una conversione semplice sarebbe (di nuovo con una funzione):

def add_nulls2(int, cnt):
    nulls = str(int)
    for i in range(cnt - len(str(int))):
        nulls = '0' + nulls
    return nulls

Questa è la mia funzione Python:

def add_nulls(num, cnt=2):
  cnt = cnt - len(str(num))
  nulls = '0' * cnt
  return '%s%s' % (nulls, num)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top