2010-06-24 124 views
2
  "Type","Name","Description","Designation","First-term assessment","Second-term assessment","Total" 
      "Subject","Nick","D1234","F4321",10,19,29 
      "Unit","HTML","D1234-1","F4321",18,, 
      "Topic","Tags","First Term","F4321",18,, 
      "Subtopic","Review of representation of HTML",,,,, 

所有上述從Excel工作表,將其轉化爲CSV和即上述Python腳本從csv文件中讀取

頭顯示爲您會注意到一個值包含七個coulmns,所述下面這些數據變化,

我有這樣的腳本從python腳本生成這些,腳本低於

from django.db import transaction 
import sys 
import csv 
import StringIO 



file = sys.argv[1] 
no_cols_flag=0 
flag=0 
header_arr=[] 


print file 
f = open(file, 'r') 



while (f.readline() != ""): 
    for i in [line.split(',') for line in open(file)]: # split on the separator 
    print "===========================================================" 
    row_flag=0 
    row_d="" 
    for j in i: # for each token in the split string 
     row_flag=1 
     print j 


     if j: 
     no_cols_flag=no_cols_flag+1 
     data=j.strip() 
     print j 

    break 

如何修改上面的腳本,這不能不說數據屬於ŧ Ø特定的列標題..

感謝..

回答

9

要導入的csv module,但從來沒有使用它。爲什麼?

如果你

import csv 
reader = csv.reader(open(file, "rb"), dialect="excel") # Python 2.x 
# Python 3: reader = csv.reader(open(file, newline=""), dialect="excel") 

你得到一個reader對象,將包含所有你需要的;第一行將包含標題,並且後續行將包含相應位置中的數據。

更妙的可能(如果我理解你正確):

import csv 
reader = csv.DictReader(open(file, "rb"), dialect="excel") # Python 2.x 
# Python 3: reader = csv.DictReader(open(file, newline=""), dialect="excel") 

DictReader可以遍歷,返回使用的列標題作爲鍵dict個序列,後面的數據作爲值,所以

for row in reader: 
    print(row) 

將輸出

{'Name': 'Nick', 'Designation': 'F4321', 'Type': 'Subject', 'Total': '29', 'First-term assessment': '10', 'Second-term assessment': '19', 'Description': 'D1234'} 
{'Name': 'HTML', 'Designation': 'F4321', 'Type': 'Unit', 'Total': '', 'First-term assessment': '18', 'Second-term assessment': '', 'Description': 'D1234-1'} 
{'Name': 'Tags', 'Designation': 'F4321', 'Type': 'Topic', 'Total': '', 'First-term assessment': '18', 'Second-term assessment': '', 'Description': 'First Term'} 
{'Name': 'Review of representation of HTML', 'Designation': '', 'Type': 'Subtopic', 'Total': '', 'First-term assessment': '', 'Second-term assessment': '', 'Description': ''} 
+0

我有修復編輯縮進 – Hulk 2010-06-24 07:03:14

+3

在Python 2.x中,*總是*以二進制模式('rb'或'wb',如適用)打開文件。 – 2010-06-24 11:07:49

+0

@John Machin:爲什麼? csv模塊的文檔沒有提到這一點,我從來沒有遇到過打開沒有'b'標誌的文件的問題。一些例子使用它,有些例子不使用它。你可能是非常正確的,但我想知道這背後的基本原理。 – 2010-06-24 11:47:51