我是python中的初学者,我试图将csv文件读入python字典以生成html表。 我的文件中有30列,我希望csv文件中的前4列成为我的html表中的列和下一个html表中的下列六列等等。我的一些列包括字符串,其中一些包括整数 csv文件就像:
oposition mat won lost total overs
aa 5 3 2 400 20
bb 4 2 2 300 20
cc 4 3 1 100 19
我试图将数据设为:
<table>
<tr><td>aa</td> <td>5</td> <td>3</td> <td>2</td></tr>
<tr><td>bb</td> <td>4</td> <td>2</td> <td>2</td></tr>
<tr><td>cc</td> <td>4</td> <td>3</td> <td>1</td></tr>
</table>
到目前为止我的代码是;
infile = open("minew.csv", "r")
mydict = {}
for line in infile:
words = line.split(",")
oposition = words[0]
mat = words[1]
won = words[2]
lost = words[3]
mydict[oposition] = oposition
mydict[mat] = int(mat)
mydict[won] = int(won)
mydict[lost] = int(lost)
print("<table>")
for o,m,w,l in mydict.keys():
print("<tr><td>{op}</td> <td>{mt}</td> <td>{wi}</td> <td>{lo}</td>
</tr>".format(
op = mydict[oposition],
mt = mydict[mat]
wi = mydict[won]
lo = mydict[lost]))
print("</table>")
我无法使我的代码正常工作。请任何人帮助我。 非常感谢
答案 0 :(得分:3)
不要重新发明轮子,使用现有的csv package:
import csv
with open('minew.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>')
答案 1 :(得分:0)
我不清楚输入文件中的列之间只有一个字符,例如tab('\ t`),在这种情况下,我认为csv模块可能不适用。这是另一种方法。
print ('<table>')
with open('minew.csv') as minew:
first = True
for line in minew.readlines():
if first:
first = False
else:
values = line.split()
print ('<tr>', end='')
for value in values:
print ('<td>%s</td>' % value, end='')
print ('</tr>')
print ('</table>')
我认为这与您的代码之间的主要区别在于我使用了split()
而不是split(',')
,因为列之间有空格。
这是输出。
<table>
<tr><td>aa</td><td>5</td><td>3</td><td>2</td></tr>
<tr><td>bb</td><td>4</td><td>2</td><td>2</td></tr>
<tr><td>cc</td><td>4</td><td>3</td><td>1</td></tr>
</table>
答案 2 :(得分:0)
我认为你最好知道一些观点:
1,打开csv文件时,必须跳过带next()
的标题
2,不需要创建一个新的dict来做到这一点,并记住python dict没有被命令。
3,只需使用第一个循环中的元素,就像你已经捕获它们一样。
4,操作后关闭文件始终是一个好习惯。
假设你有csv文件:
oposition mat won lost total overs
aa 5 3 2 400 20
bb 4 2 2 300 20
cc 4 3 1 100 19
根据你的逻辑,代码在这里:
infile = open("minew.csv", "r")
next(infile)
print("<table>")
for line in infile:
words = line.strip().split()
oposition = words[0]
mat = words[1]
won = words[2]
lost = words[3]
print("<tr><td>{op}</td> <td>{mt}</td> <td>{wi}</td> <td>{lo}</td></tr>".format(op = oposition,mt = mat,wi = won,lo = lost))
print("</table>")
infile.close()
输出:
<table>
<tr><td>aa</td> <td>5</td> <td>3</td> <td>2</td></tr>
<tr><td>bb</td> <td>4</td> <td>2</td> <td>2</td></tr>
<tr><td>cc</td> <td>4</td> <td>3</td> <td>1</td></tr>
</table>