[pyar] Hola Mundo y [HELP!] Consulta sobre encoding de archivo...

Juan Ignacio euribates en gmail.com
Mar Mayo 28 13:53:21 ART 2013


Puedes usar el módulo codecs para abrir un fichero indicándole la
codificación a usar. Por ejemplo, si tienes un fichero en iso-8859-1 y
quieres salvarlo como utf-8, puedes hacer:

import codecs
fin = codecs.open('entrada.txt', 'rb', encoding='iso-8859-1')
fout = codecs.open('saluda.txt', 'wb', encoding='utf-8')
for linea in fin.readlines():
    fout.write(linea)
fout.close()
fin.close()

Con el fichero abierto de esa manera, puedes (y debes :-)) trabajar en
unicode, él hace las conversiones necesarias de forma transparente. Este
código, si el fichero pepe.py está correctamente codificando en utf-8,
vemos que las líneas son todas unicode :

import codecs
for l in codecs.open('pepe.py', encoding='utf-8'):
    print type(l)





2013/5/28 Leandro E. Colombo Viña <colomboleandro en gmail.com>

> Mis queridos, buen día y....
>
> #!/usr/bin/env python
>
> print("Hola Mundo!!!!")
>
> Aprovecho para mandarles una consulta que hace días no me deja avanzar.
> Tengo que hacer un script que necesito que lea un CSV (exportado de una
> hoja de Excel) y complete con esos datos un formulario PDF.
> Para eso estoy usando *fdfgen* para con los datos leídos del CSV
> construir un FDF y con eso combinar los datos finalmente usando *pdftk*.
> Hasta ahora eso no ha sido gran problema. Puedo leer un CSV de prueba,
> construir el FDF y armar el PDF.
>
> Entonces, cuál es el problema?!
>
> Justamente, la codificación de los datos. El Excel me exporta el CSV en *
> iso-8859-1* (a.k.a. *latin-1*) y ya intenté usando en el script las
> instrucciones de http://www.python.org/dev/peps/pep-0263/ pero no tuve
> éxito. Evidentemente estoy haciendo algo mal y no puedo encontrar qué es.
>
> Les paso el script:
>
> #!/usr/bin/env python
>
> # -*- coding: iso-8859-1 -*-
>
> from fdfgen import forge_fdf
>
> import os
>
> import sys
>
> import csv
>
>
> sys.path.insert(0, os.getcwd())
>
>
> csv_file = "Nómina.csv"
>
> pdf_file = "Nómina-Formulario.pdf"
>
> tmp_file = "tmp.fdf"
>
> output_folder = './output/'
>
>
>
> def process_csv(file):
>
> headers = []
>
> data = []
>
> csv_data = csv.reader(open(file))
>
>
>  for i, row in enumerate(csv_data):
>
> if i == 0:
>
> headers = row
>
> print ((("Los encabezados del archivo son:") + str(headers)))
>
> continue
>
> field = []
>
> for i in range(len(headers)):
>
> field.append((str(headers[i]) + str(row[0]), row[i]))
>
> print(field)
>
> data.append(field)
>
> return data
>
>
> def form_fill(fields, j):
>
> print((("Leyendo la entrada: ") + str(fields)))
>
>
>  fdf = forge_fdf("", fields, [], [], [])
>
> fdf_file = open(tmp_file, "w")
>
> fdf_file.write(fdf)
>
> fdf_file.close()
>
>
>  output_file = '{0}COMPLETO-{2}-{1}'.format(output_folder, pdf_file, j)
>
> aux_file = '{0}COMPLETO-{2}-{1}'.format(output_folder, pdf_file, j - 1)
>
> remove_file = '{0}COMPLETO-{2}-{1}'.format(output_folder, pdf_file, j - 2)
>
>
>  if j == 0:
>
> print("Creando el primer archivo")
>
> cmd = 'pdftk "{0}" fill_form "{1}" output "{2}" dont_ask'.format(pdf_file,
> tmp_file, output_file)
>
> else:
>
> print((("Escribiendo {0} con los datos de {1} en {2}.").format(aux_file,
> tmp_file, output_file)))
>
> cmd = 'pdftk "{0}" fill_form "{1}" output "{2}" dont_ask'.format(aux_file,
> tmp_file, output_file)
>
> if j >= 2:
>
> os.remove(remove_file)
>
>
>  os.system(cmd)
>
> os.remove(tmp_file)
>
>
> data = process_csv(csv_file)
>
> print ("\nDatos leídos del archivo {0}:\n").format(csv_file)
>
> print data
>
> print("\n\tSe leyeron: ") + repr(len(data)) + " registros.\n"
>
>
> if len(data) > 78:
>
> print("ERROR: El archivo de datos origen tiene demasiados registros.")
>
> print("La Nómina como máximo se 78 entradas.")
>
> print("Por favor, corrija los datos de entrada y vuelva a ejecutarlo.")
>
> else:
>
> j = 0
>
> print('Generando Formulario Completo:')
>
> print('------------------------------')
>
> for i in data:
>                 form_fill(i, j)
>
> j = j + 1
>
>
> A todos los que hayan llegado hasta acá, ya les agradezco por haberme
> leído! Y a los que me respondan les agradezco de antemano!!!!
> Saludos!
> LEO.
>
>
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
>



-- 
Juan Ignacio Rodríguez de León
Móvil: 605 890514
E-Mail: euribates en gmail.com
http://www.metriz.com/
http://descon2.com/
http://www.elornitorrincoenmascarado.com/
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20130528/3cb00d4f/attachment.html>


More information about the pyar mailing list