我尝试将CSV列的数据打印到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>
感谢
答案 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>
来制作一行。
table, td {
border: solid 1px #CCC;
}
&#13;
<table>
<tr>
<td>firstname surname</td>
<td>firstname surname</td>
<td>firstname surname</td>
</tr>
</table>
&#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