2010-06-24 3 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",,,,, 

Tout ce qui précède sont la valeur à partir d'une feuille Excel, qui est converti en csv et qui est celui indiqué ci-dessusscript Python lecture d'un fichier csv

L'en-tête que vous remarquez contient sept coulmns, la les données ci-dessous les modifier,

Je possède ce script pour générer ces de script python, le script est ci-dessous

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 

Comment modifier le script ci-dessus pour dire que ces données appartient t o un en-tête de colonne particulière ..

merci ..

Répondre

9

Vous importez le csv module mais jamais l'utiliser. Pourquoi?

Si vous

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

vous obtenez un objet reader qui contiendra tout ce que vous avez besoin; la première ligne contiendra les en-têtes et les lignes suivantes contiendront les données dans les emplacements correspondants.

Mieux encore peut-être (si je comprends bien):

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

Ce DictReader peut être itéré, retournant une séquence de dict s qui utilisent l'en-tête de colonne comme les clés et les données suivantes en tant que valeurs, si

for row in reader: 
    print(row) 

volonté sortie

{'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

i have fix ed the indentation – Hulk

+3

En Python 2.x, * TOUJOURS * ouvrir le fichier en mode binaire ('rb' ou 'wb', selon le cas). –

+0

@John Machin: Pourquoi? Les docs du module csv ne disent rien à ce sujet, et je n'ai jamais eu de problèmes pour ouvrir des fichiers sans le drapeau 'b'. Certains exemples l'utilisent, d'autres non. Vous avez peut-être raison, mais j'aimerais savoir pourquoi. –

Questions connexes