08 gennaio, 2020

Help (solo per me) - format di Python

Titan + Enceladus
 Tutte le volte  Spesso mi capita di chiedermi quale sia la sintassi corretta per format, storia lunga per mancanza di memoria (mia), argomento che considero da sempre (fin dai tempi del Fortran) astruso e allora oggi mi faccio lo script riassuntivo, tipo help o man o --insomma questo (py-fmt):

#!/bin/bash
cat py_fmt


Semplicissimo, vero? Visualizza il file py_fmt che si trova nella stessa directory, per me ~/bin
 
Python Format specification, da qui:
    https://docs.python.org/3/library/string.html#formatspec

Dati usati negli esempi
    est = 'specifiche di format'
    n_int = 42
    n_fl1 = 123.456
    n_fl2 = 73 / 37
    K = 1000
    M = 1000_000
    G = 1000_000_000

Generico
st = f'{est}: intero {n_int}, float {n_fl1} e {n_fl2}'
print(st)
specifiche di format: intero 42, float 123.456 e 1.972972972972973

st = f'e anche: {K * n_fl2}, {M * n_fl2}, {G * n_fl2}'
print(st)
e anche: 1972.9729729729731, 1972972.972972973, 1972972972.972973

Usando format (come prima di 3.6):
st = 'intero {0}, float {1} e {2}'.format(n_int, n_fl1, K * n_fl2)
print(st)
intero 42, float 123.456 e 1972.9729729729731

Controllo formato/precisione
interi
st = f'{n_int} {n_int:d} {n_int:5d}'
print(st)
42 42    42

st = f'bin: {n_int:#b}, oct: {n_int:#o}, hex: {n_int:#x} o {n_int:#X}'
print(st)
bin: 0b101010, oct: 0o52, hex: 0x2a o 0X2A

floating point -- f
st = f'{n_fl1} {n_fl1:.2f} {n_fl1:10.4} {n_fl2} {n_fl2:.2f} {n_fl2:10.2}'
print(st)
123.456 123.46      123.5 1.972972972972973 1.97        2.0

formato esponenziale -- e
st = f'{n_fl1} {n_fl1:.2} {n_fl1:10.2e} {n_fl2} {n_fl2:.2e} {n_fl2:10.2E}'
print(st)
123.456 1.2e+02   1.23e+02 1.972972972972973 1.97e+00   1.97E+00

st = f'{n_fl2 * K} {n_fl2 * K : .2e} {n_fl2 * M : 10.2e}' + \
     f'{n_fl2 * G : .3e} {n_fl2 * G : .3E}'
print(st)
1972.9729729729731  1.97e+03   1.97e+06 1.973e+09  1.973E+09

formato generale -- g
st = f'{n_fl2} {n_fl2 * K} {NL}' + \
     f'{n_fl2 : .3e} {n_fl2 * K : .3e} {n_fl2 * M : .3e}' + \
     f'{n_fl2 * G: .3e} {NL}'  + \
     f'{n_fl2 : .4g} {n_fl2 * K: .4g} {n_fl2 * M : .4g} {n_fl2 * G: .4G}'
print(st)
1.972972972972973 1972.9729729729731
 1.973e+00  1.973e+03  1.973e+06 1.973e+09
 1.973  1973  1.973e+06  1.973E+09

Non è perfetto, sto già pensando a una nuova versione, migliorata, ma per adesso produce questo (sì, lo so che non rende 🙂)

🔴🔵

Nessun commento:

Posta un commento