Reputation: 45
I've been trying to read a CSV file into a HTML table through Python for a little while now. Currently my code looks like:
import csv
table = ''
with open("2016motogp.csv", encoding="utf8") as csvFile:
reader = csv.DictReader(csvFile, delimiter=',')
table = '<tr>{}</tr>'.format(''.join(['<td>{}</td>'.format(header) for header in reader.fieldnames]))
for row in reader:
table_row = '<tr>'
for fn in reader.fieldnames:
table_row += '<td>{}<\td>'.format(row[fn])
table_row += '<\tr>'
table += table_row
This is the output of the written table: https://www.w3schools.com/code/tryit.asp?filename=FG5TPW9EY3LT
It has got all the HTML table tags throughout along with a few errors in names and odd additions that shouldn't be there. The header line is clean besides the odd addition in front of the year cell.
Here is a link to the csv: https://uploadfiles.io/6joj6
If anyone could help to 'clean up' the table by adjusting the code it would be much appreciated. Thanks in advance,
EDIT: Thanks for the help, the html tags were rectified by correcting the backslash to forward-slashes, the addition to the year cell was corrected by changing the encoding option.
I discovered that the \xa0 was an encoding error or something along those lines and used: table = table.replace(u'\xa0', u' ')
to replace the additions.
Upvotes: 0
Views: 282
Reputation: 2054
As @błotosmętek already mentioned, you have <\
instead of </
in some HTML tags.
Regarding the strange additions, it looks like the CSV is not UTF-8, it's UTF-8 with BOM. Try open("2016motogp.csv", encoding="utf-8-sig")
.
Upvotes: 1
Reputation: 12927
Do not generate HTML "by hand", use dominate
module instead. Much easier and more robust. Also, you have two typos in your code - <\tr>
should be </tr>
, and <\td>
should be </td>
.
Upvotes: 1