【问题标题】:Read CSV file into HTML tables with Python使用 Python 将 CSV 文件读入 HTML 表格
【发布时间】:2017-05-31 05:12:25
【问题描述】:

我需要从 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>

如果有人提供一些指导或帮助,将不胜感激。

提前致谢,

【问题讨论】:

    标签: python html csv


    【解决方案1】:

    使用 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()
    

    pandas read_csv doc

    pandas to_html doc

    【讨论】:

    • 谢谢!救了我。熊猫太棒了!
    【解决方案2】:

    该错误可能是因为相关文件可能未使用 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
    

    【讨论】:

    • 当然好像做了什么,这就是现在的输出。 imgur.com/0qGtzX2
    • 您还必须更改您的delimter
    • 请立即查看。
    • 它没有读取带有标题的顶行是否有原因?现在开始好看了。 imgur.com/OUW7o02
    • 谢谢,我仍然不确定整个过程中不必要的 以及 Year 单元格中的 \ufeff 以及每个车手姓名之前的 \xa0,如何在其中解决编码?这是输出w3schools.com/code/tryit.asp?filename=FG5JLWTH57MF
    猜你喜欢
    • 2013-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多