【问题标题】:python - print a csv row into a HTML columnpython - 将 csv 行打印到 HTML 列中
【发布时间】:2016-09-10 17:18:27
【问题描述】:

我正在尝试将 CSV 列的数据打印到 HTML 表格中

CSV 文件是这样的(示例)

firstname, surname
firstname, surname
firstname, surname
firstname, surname
firstname, surname
firstname, surname
firstname, surname

我可以正常读取这些数据 - 并通过以下方式将其打印到表格中:

import csv
import sys
from fpdf import FPDF, HTMLMixin

#load in csv file
data = csv.reader(open(sys.argv[1]))

names = ""

#Read column names from first line of the file
fields = data.next()
for row in data:
    names = row[0] + " " + row[1]
    html_row = " <tr> "
    html_col = " <td border=0 width=15%>" + names + "</td></tr>"
    html_out = html_out + html_row + html_col 


html = html_header + html_out + html_footer
print html
pdf.write_html(html)
pdf.output('test2.pdf', 'F')

这给出了以下内容:

<tr><td border=0 width=15%>firstname surname</td></tr>
<tr><td border=0 width=15%>firstname surname</td></tr>
<tr><td border=0 width=15%>firstname surname</td></tr>

ie - 每个名字都在单独的行上 - 我想做的是将每个名字都作为一个单元格列单元格

<tr><td border=0 width=15%>firstname surname</td><td border=0 width=15%>firstname surname</td><td border=0 width=15%>firstname surname</td></tr>

谢谢

【问题讨论】:

  • 您是否可能在html_out = html_out + .... 行缺少缩进,因为目前它不是循环的一部分,不会给您问题中显示的结果?
  • 我的格式错误 - 现在应该修复..
  • 另外,html_rowend 未在所示代码中的任何位置设置。那么这是否如图所示运行?
  • 现在已移除 - 在尝试格式化示例时留下了

标签: python html


【解决方案1】:

未设置样本中的某些变量,但这是由于我猜是由于将样本减少到最小大小,所以如果您填写这些详细信息,以下内容应该有效(如果超过 7 个条目,由于硬编码 15%,则次优html td 元素的宽度。

import csv
import sys
from fpdf import FPDF, HTMLMixin

# load in csv file
data = csv.reader(open(sys.argv[1]))

# Read column names from first line of the file to ignore them
fields = data.next()

问题的循环下方已被列表理解所取代。 cell_att 保存表格单元格元素的给定属性,它将像 row[0] 和 row[1] 一样插入到组成 html_out 列表的字符串中。

cell_att = " border=0 width=15%"
row_data = ["<td%s>%s %s</td>" % (cell_att, row[0], row[1]) for row in data]

这里简单地连接所有单元格并注入到一个 html 表格行元素中:

html_out = "<tr>" + "".join(row_data) + "</tr>"

html = html_header + html_out + html_footer
print html
pdf.write_html(html)
pdf.output('test2.pdf', 'F')

其他答案也为 IMO 提供了有用的提示,尤其是。在 HTML 的样式级别。如果您稍后决定消化/转换超过 7 个名称,上述代码可能是创建最多包含 7 个单元格的行或通过少量修改来调整宽度属性值的良好开端。

【讨论】:

    【解决方案2】:

    您只需要一个&lt;tr&gt; 即可组成一行。

    table, td {
      border: solid 1px #CCC;
    }
    <table>
        <tr>
            <td>firstname surname</td>
            <td>firstname surname</td>
            <td>firstname surname</td>
        </tr>
    </table>

    为了在您的代码中进行这项工作,您需要在循环外创建行:

    html_row = '<tr>' # open row
    
    for row in data:
        names = row[0] + " " + row[1]
        # append columns to the row
        html_row += "<td border=0 width=15%>" + names + "</td>"
    
    html_row += '</tr>' # close row
    
    html_out = html_row
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-13
      • 1970-01-01
      • 2018-02-24
      • 1970-01-01
      • 2014-05-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多