2017-05-25 100 views
0

这是一个Python初学者,我尝试将一个csv文件读入python字典以生成html表格。 我在我的文件中有30列,我想在csv文件中的前4列到我的html表格作为列和在另一个html表中的下六列等等..我的一些列包括字符串和一些包括整数 csv文件是像:将csv文件读入python字典并创建html表格

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

它是什么目前输出?请将此添加到问题中。 – TTeeple

+0

----> 7 mat = words [1] IndexError:列表索引超出范围 – Dush

回答

0

目前尚不清楚,我认为,只有在你的输入文件中的列,如之间的单个字符标签('\ 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> 
+0

更改了代码和我的csv文件有点和这个作品。即时通讯想创建一个HTML页面,并把该表内的页面。所以不是打印数据,我尝试将相同的输出分配到一个新的变量,但我的代码到目前为止没有进展。是可以把输出到一个HTML页面编辑器代码列表或即时通讯复制和粘贴输出数据到我的HTML页面编辑器。请帮我解决 – Dush

+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>') 
0

我觉得有你最好能知道一些要点:

1,你有当您打开CSV文件

2忽略标题与next(),无需创建新的词典做到这一点,并记住python字典不是命令。

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

IndexError:列表索引超出范围 – Dush

+0

是您的csv文件格式是否与我的答案中的格式相同? –

+0

是的,它是相同的 – Dush