Tengo un número 12345 y quiero el resultado '1,2345' . Intenté el siguiente código, pero fallé:
>>> n = 12345 >>> f"{n:,}" '12,345'Regex funcionará para usted:
import re def format(n): return re.sub(r"(\d)(?=(\d{4})+(?!\d))", r"\1,", str(n)) >>> format(12345) '1,2345' >>> format(12345678) '1234,5678' >>> format(123456789) '1,2345,6789'Explicación:
Partido:
(\d) Coincide con un dígito...(?=(\d{4})+(?!\d)) ...que va seguido de uno o más grupos de exactamente 4 dígitos.Reemplazar:
\1, reemplaza el dígito coincidente con él mismo y un ,Puede dividir su número en fragmentos de 10000 usando el módulo y la división de enteros, luego str.join usando los delimitadores ','
def commas(n): s = [] while n > 0: n, chunk = divmod(s, n) s.append(str(chunk)) return ','.join(reversed(s)) >>> commas(123456789) '1,2345,6789' >>> commas(123) '123'Suena como una cosa local (*) . Esto imprime 12,3456,7890 (¡ Pruébelo en línea! ):
import locale n = 1234567890 locale._override_localeconv["thousands_sep"] = "," locale._override_localeconv["grouping"] = [4, 0] print(locale.format_string('%d', n, grouping=True)) Supongo que es una forma de hackear basada en esta respuesta . La otra respuesta allí habla sobre el uso de babel , tal vez esa sea una forma limpia de lograrlo.
(*) Una búsqueda rápida en Google encontró esto hablando de grupos chinos de cuatro dígitos, y el nombre de OP parece algo chino, así que...