python - 将csv行打印到HTML列中

时间:2016-09-10 17:18:28

标签: python html

我尝试将CS​​V列的数据打印到HTML表格

CSV文件就像这样(样本)

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

我可以在ok中读取这些数据 - 并通过以下内容将其打印到表中:

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>

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

<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>

感谢

2 个答案:

答案 0 :(得分:0)

样本中的一些变量未设置,但这是由于我猜测样本减少到最小尺寸,所以如果填写这些细节,以下内容应该有效(如果超过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个单元格的行的良好开端,或者通过微小修改来调整宽度属性值。

答案 1 :(得分:-1)

您只需要一个<tr>来制作一行。

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

为了在您的代码中使用,您需要在循环外创建行:

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