He estado tratando de leer datos del archivo .csv e imprimir los datos como texto/número en un archivo HTML. Como el siguiente ejemplo:
Ahora, quiero imprimir en HTML como este:
La edad actual del Sr. abc es 30 Años. Los números/texto en negrita y cursiva provendrán del archivo csv y tan pronto como se actualice el archivo csv, los datos en HTML también se actualizarán. Tanto el archivo csv como el HTML estarán en la misma carpeta local.
El enfoque habitual es utilizar el lector CSV integrado de Python para analizar correctamente cada fila en una lista de valores. Se puede hacer de la siguiente manera:
import csv with open('input.csv') as f_input, open('output.html', 'w') as f_output: csv_input = csv.reader(f_input) header = next(csv_input) # skip the header # Write the HTML header f_output.write("<html>\n<body>\n") for row in csv_input: f_output.write(f"Current age of Mr. {row[0]} is {row[1]} Years.<br>\n") # Write the HTML footer f_output.write("</body>\n</html>\n")Para sus datos CSV de muestra, esto produciría la siguiente salida HTML:
<html> <body> Current age of Mr. abc is 20 Years.<br> Current age of Mr. xyz is 30 Years.<br> Current age of Mr. jkl is 40 Years.<br> </body> </html>Para crear un HTML por fila, necesitaría reorganizar un poco las cosas y también decidir un esquema de nombres para los archivos de salida. Esto agrega el nombre a cada nombre de archivo:
import csv with open('input.csv', encoding='utf-8') as f_input: csv_input = csv.reader(f_input) header = next(csv_input) # skip the header for row in csv_input: with open(f'output_{row[0]}.html', 'w', encoding='utf-8') as f_output: # Write the HTML header f_output.write("<html>\n<body>\n") f_output.write(f"Current age of Mr. {row[0]} is {row[1]} Years.<br>\n") # Write the HTML footer f_output.write("</body>\n</html>\n")Un enfoque alternativo sería analizar cada línea usted mismo, esto podría hacerse de la siguiente manera:
with open('input.csv') as f_input, open('output.html', 'w') as f_output: header = next(f_input) # skip the header # Write the HTML header f_output.write("<html>\n<body>\n") for line in f_input: row = line.strip().split(',') f_output.write(f"Current age of Mr. {row[0]} is {row[1]} Years.<br>\n") # Write the HTML footer f_output.write("</body>\n</html>\n") Sin embargo, esto no funcionaría si su columna de nombre único contuviera comas. por ejemplo "John, Smith" (que es válido en archivos CSV, las comillas se usan para ignorar las comas dentro)
El enlace a los datos CSV no es válido, por lo que es difícil de decir, pero en general:
Entonces, por ejemplo, si el archivo de datos es data.csv y se ve así:
John:30 Emily:40 Carla:25 puedes leerlo usando la rutina with open :
with open('data.csv', 'r') as datafile: data = datafile.readlines()Ahora tiene todos los datos en una lista de líneas, por lo que puede iterar sobre la lista y analizar los datos:
newdata = [] for line in data: newdata.append(line.rstrip().split(':'))Ahora debería tener todos los pareados en la lista de datos nuevos y puede usarlos como desee. Por ejemplo, para imprimir la tabla HTML, podría hacer:
print('<table>') for couple in newdata: print(f"<tr><td>{couple[0]}</td><td>{couple[1]}</td></tr>") print('</table>') Esto imprimirá el código HTML de la tabla. Para poder controlar el aspecto de algunos elementos mediante CSS, debe usar una etiqueta como div o span con algunas clases, como esta:
for couple in newdata: print(f"The age of <div class="name">{couple[0]}</div> is <div class="age">{couple[1]}</div>.")Como ya se dijo, cuando se analizan los datos, puede usar cualquier técnica que produzca el HTML: manual, plantillas Jinja, ... para guardar el archivo HTML.
Su archivo de datos de enlace no es un enlace válido. Todavía le proporcionaré una implementación de muestra que puede adaptar a su caso:
mismople.csv
Name, Age ABC, 30 ...Tenga un script separado en la misma carpeta para crear html basado en su csv
csv_data=open('sample.csv','r').read().split('\n') html_body = '' for line in csv_data: line = line.split(',') html_body += f'<p>Mr. {line[0]} is {line[1]} Years</p>\n' html_output = '<html><body>\n'+html_body+'</body></html>' with open('html_out.html', 'w') as outfile: outfile.write(html_output)