3 votes

Python script lecture d'un fichier csv

           "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 est la valeur d'une feuille excel, qui est convertie en csv et c'est celui qui est montré ci-dessus.

L'en-tête, comme vous le remarquez, contient sept colonnes, les données en dessous varient,

J'ai ce script pour générer ces derniers à partir de python script,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 appartiennent à un en-tête de colonne particulier .

Merci..

11voto

Tim Pietzcker Points 146308

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

Si vous le faites

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 reader qui contiendra tout ce dont vous avez besoin ; la première ligne contiendra les en-têtes, et les lignes suivantes contiendront les données aux endroits correspondants.

Une solution encore meilleure pourrait être (si je vous 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 site DictReader peut être itéré, retournant une séquence de dict qui utilisent l'en-tête de colonne comme clé et les données suivantes comme valeurs, donc

for row in reader:
    print(row)

produira

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X