我需要从CSV文件输入数据并创建HTML表作为输出。
我目前正在处理:
with open('2016motogp.csv') as csvfile:
reader = csv.DictReader(csvfile, delimiter='\t')
for row in reader:
print('<tr>')
for fn in reader.fieldnames:
print('<td>{}</td>'.format(row[fn]))
print('</tr>')
我想要读入表格的CSV文件是: https://ufile.io/6joj6
当我运行该函数时,我收到错误:
---------------------------------------------------------------------------
UnicodeDecodeError Traceback (most recent call last)
<ipython-input-11-3a27549e50fe> in <module>()
----> 1 write_html_table("2016motogp")
<ipython-input-9-91d2a78b30ad> in write_html_table(filename)
55 with open(filename + ".csv") as csvfile:
56 reader = csv.DictReader(csvfile, delimiter='\t')
---> 57 for row in reader:
58 print('<tr>')
59 for fn in reader.fieldnames:
E:\Anaconda\lib\csv.py in __next__(self)
109 if self.line_num == 0:
110 # Used only for its side effect.
--> 111 self.fieldnames
112 row = next(self.reader)
113 self.line_num = self.reader.line_num
E:\Anaconda\lib\csv.py in fieldnames(self)
96 if self._fieldnames is None:
97 try:
---> 98 self._fieldnames = next(self.reader)
99 except StopIteration:
100 pass
E:\Anaconda\lib\encodings\cp1252.py in decode(self, input, final)
21 class IncrementalDecoder(codecs.IncrementalDecoder):
22 def decode(self, input, final=False):
---> 23 return codecs.charmap_decode(input,self.errors,decoding_table)[0]
24
25 class StreamWriter(Codec,codecs.StreamWriter):
UnicodeDecodeError: 'charmap' codec can't decode byte 0x81 in position 1037: character maps to <undefined>
如果有人提供一些指导或帮助,我们将不胜感激。
提前致谢,
答案 0 :(得分:4)
使用Python pandas DataFrame to_html方法
您可以将csv文件读入Python pandas DataFrame。然后,使用DataFrame to_html
功能创建HTML文件或将结果分配到字符串中并以此方式使用它。这会将DataFrame转换为HTML表。请参阅下面的Python文档链接。
import pandas as pd
# Read the csv file in
df = pd.read_csv('2016motogp.csv')
# Save to file
df.to_html('myTable.htm')
# Assign to string
htmTable = df.to_html()
答案 1 :(得分:3)
错误可能是因为有问题的文件可能没有使用CP1252编码。假设它使用utf-8
编码,只需在open
语句中添加编码,它就可以正常工作。我测试了它。
import csv
table = ''
with open(csv_path, 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