2017-05-25 137 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