Python - de .csv a .html Python

 
Vista:

de .csv a .html Python

Publicado por Aprendiz (14 intervenciones) el 09/12/2017 18:31:57
Hola a todos,

Tengo que crear un programa, pero no sé como empezar...La idea es la siguiente.

- Tengo un archivo .csv en el ordenador con unos datos y necesito que python abra ese archivo , y me imprima los datos en la pantalla en una tabla. El archivo tiene que ser a elección del usuario.

- Necesito que cuando pida el nombre del archivo, si ese archivo no se encuentra me alerte de algún tipo de error. Tipo "el archivo no existe o algo así".

- Finalmente necesito que los datos del archivo .csv impresos en pantalla me los transforme en un fichero .html.

Esto más perdido que un pulpo en un garaje...no se ni por donde empezar.

Un saludo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

de .csv a .html Python

Publicado por Aprendiz (14 intervenciones) el 09/12/2017 19:49:36
Hasta el momento tengo programado todo eso...que sinceramente me parece una chapuza y creo que es mejorable pero no sé como....
Me faltaría que crease el achivo HTML y la tabla que tampoco se como hacerlo.

Un saludo



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
print ("                         De .CSV a .HTML                      ")
print ("                                                                            ")
 
try:
	nombre_csv = raw_input ("Introduzca el nombre del archivo que desea abrir: ") #El usuario decide el archivo que importa
	archivo_csv= open((nombre_csv+'.csv')) #Python abre el archivo seleccionado por el usuario
	contenido = archivo_csv.read () #Leyendo el archivo .csv
	print 'Nombre     ''Apellido1     ' 'Apellido2     ' 'mail     '
	print contenido #Imprime el contenido del archivo en pantalla
	print raw_input ('Si los datos son correctos pulse enter para continuar')
	nombre_html = raw_input ("Introduzca el nombre del archivo para guardar los datos en formato .html:")
	archivo_html = open ((nombre_html+'.html'),"w")
 
except IOError:
	print 'El archivo', (nombre_csv), 'no existe'
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de abzerox
Val: 425
Bronce
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

de .csv a .html Python

Publicado por abzerox (109 intervenciones) el 10/12/2017 03:28:20
Hola, hize una pequeña función que te puede servir para realizar lo que planteas. csv_to_html
Para usarla debes pasarle como parámetro el fichero csv y de forma opcional en nombre del fichero html destino (por defecto es index.html) y tambien de forma opcional el titulo del documento.

1
csv_to_html('tu_archivo.csv')

Nos comentas si te sirvio.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar

de .csv a .html Python

Publicado por aprendiz (14 intervenciones) el 10/12/2017 10:41:11
Hola,

No se como insertarlo en mi código.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de abzerox
Val: 425
Bronce
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

de .csv a .html Python

Publicado por abzerox (109 intervenciones) el 10/12/2017 10:49:32
Después de pedir el nombre del archivo csv al usuario llamas a la función pasando como parámetro dicho archivo, esto generara un nuevo archivo index.html, el cual puedes cambiar dando como segundo argumento a la función.

1
2
3
4
5
6
// Recuerda: incluir aquí el código de la funcion csv_to_html
try:
       nombre_csv = raw_input ("Introduzca el nombre del archivo que desea abrir: ")
       csv_to_html(nombre_csv)
except IOError:
       print 'El archivo', (nombre_csv), 'no existe'
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

de .csv a .html Python

Publicado por Aprendiz (14 intervenciones) el 10/12/2017 12:03:25
Siento ser tan pesado pero ¿me tiene que quedar así?

Un saludo y muchas gracias

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
print ("                         De .CSV a .HTML                      ")
print ("                                                              ")
 
import csv
from string import Template
 
html_template = Template("""
<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>$title</title>
    <style>
        * {margin: 0; padding: 0; font-size: 16px; box-sizing: border-box;}
        body {font-family: Helvetica, sans-serif; color: #212121}
        table {border-collapse: collapse; width: 100%;}
        table, td {border: 1px solid #acacac;}
        td { padding: .3rem;}
        .datasheet {max-width: 960px; width: 100%; margin: 1rem auto;
        overflow: auto;}
    </style>
</head>
<body>
    <div class="datasheet">
        <table>$content</table>
    </div>
</body>
</html>""")
 
 
def csv_to_html(csv_file, dest_filename='index.html', title='Document'):
    """ Convierte un archivo csv a una tabla en formato html. """
 
    with open(csv_file, mode='r') as f:
            # detecto el dialecto utilizado por el archivo
            dialect = csv.Sniffer().sniff(f.read(1024))
            f.seek(0)
            csv_reader = csv.reader(f, dialect)
 
            rows = ''
            for line in csv_reader:
                cols = ''
                for field in line:
                    cols += '<td>{}</td>'.format(field)
                rows += '<tr>{}</tr>'.format(cols)
 
    # creo el archivo html
    with open(dest_filename, mode='w') as f:
            content = html_template.substitute(title=title, content=rows)
            f.write(content)
try: 
	nombre_csv = raw_input ("Introduzca el nombre del archivo que desea abrir: ") #El usuario decide el archivo que importa
	csv_to_html(nombre_csv)
	archivo_csv= open((nombre_csv+'.csv')) #Python abre el archivo seleccionado por el usuario
	contenido = archivo_csv.read () #Leyendo el archivo .csv
	print contenido #Imprime el contenido del archivo en pantalla
	print raw_input ('Si los datos son correctos pulse enter para continuar')
	nombre_html = raw_input ("Introduzca el nombre del archivo para guardar los datos en formato .html:")
	archivo_html = open ((nombre_html+'.html'),"w")
	archivo_html.write 
except:
	print "El archivo",(nombre_csv), "no existe"
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de abzerox
Val: 425
Bronce
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

de .csv a .html Python

Publicado por abzerox (109 intervenciones) el 10/12/2017 22:55:22
Hola, solo necesitas solicitarle el nombre del archivo al usuario y luego llamar a la función. Esta se encarga de leer el csv y generar el html.
Te dejo el código completo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# /usr/bin/env python
# -*- coding: utf-8 -*-
 
import csv
from string import Template
 
html_template = Template("""
<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>$title</title>
    <style>
        * {margin: 0; padding: 0; font-size: 16px; box-sizing: border-box;}
        body {font-family: Helvetica, sans-serif; color: #212121}
        table {border-collapse: collapse; width: 100%;}
        table, td {border: 1px solid #acacac;}
        td { padding: .3rem;}
        .datasheet {max-width: 960px; width: 100%; margin: 1rem auto;
        overflow: auto;}
    </style>
</head>
<body>
    <div class="datasheet">
        <table>$content</table>
    </div>
</body>
</html>""")


def csv_to_html(csv_file, dest_filename='index.html', title='Document'):
    """ Convierte un archivo csv a una tabla en formato html. """

    with open(csv_file, mode='r') as f:
        # detecto el dialecto utilizado por el archivo
        dialect = csv.Sniffer().sniff(f.read(1024))
        f.seek(0)
        csv_reader = csv.reader(f, dialect)

        rows = ''
        for line in csv_reader:
            cols = ''
            for field in line:
                cols += '<td>{}</td>'.format(field)
            rows += '<tr>{}</tr>'.format(cols)

    # creo el archivo html
    with open(dest_filename, mode='w') as f:
        content = html_template.substitute(title=title, content=rows)
        f.write(content)


try:
    nombre_csv = raw_input('Introduzca el nombre del archivo que desea abrir: ')
    csv_to_html(nombre_csv)
except IOError:
    print 'El archivo %s no existe' % nombre_csv
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

de .csv a .html Python

Publicado por aprendiz (14 intervenciones) el 11/12/2017 18:33:52
Muchisimas gracias!

¿Cómo puedo hacer para poder elegir el nombre del archivo .html?

Muchas gracias y un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de abzerox
Val: 425
Bronce
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

de .csv a .html Python

Publicado por abzerox (109 intervenciones) el 11/12/2017 23:18:28
Hola, cuando llamas a la función le pasas como segundo argumento el nombre del archivo html, asi:

1
csv_to_html(nombre_csv, 'nombre_del_archivo.html')
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

de .csv a .html Python

Publicado por Aprendiz (14 intervenciones) el 12/12/2017 23:44:01
Hola,

Lo hago pero no consigo que me de la opción de elegir o meter yo el nombre, como en el caso del archivo csv...

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de abzerox
Val: 425
Bronce
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

de .csv a .html Python

Publicado por abzerox (109 intervenciones) el 12/12/2017 23:46:32
Prueba de esta forma:

1
2
3
4
5
6
try:
    nombre_csv = raw_input('Introduzca el nombre del archivo que desea abrir: ')
    nombre_html = raw_input('Introduzca el nombre del archivo html: ')
    csv_to_html(nombre_csv, nombre_html)
except IOError:
    print 'El archivo %s no existe' % nombre_csv
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar