将csv文件读入python字典并创建html表

时间:2017-05-25 12:57:56

标签: python csv

我是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>")

我无法使我的代码正常工作。请任何人帮助我。 非常感谢

3 个答案:

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