IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Au sujet de la lecture/écriture dans un fichier excel


Sujet :

Python

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2015
    Messages : 29
    Par défaut Au sujet de la lecture/écriture dans un fichier excel
    Bonjour à tous,

    J'ai 2 questions concernant le traitement de données dans Excel

    Je travaille sur des feuilles excel avec xlrd et xlwt et je rencontre quelques problèmes pour faire ce que je veux:

    1°/ je n'arrive pas à remplacer une valeur dans une cellule : par exemple si j'ai 1 en A1 et que je veux écrire 2 à la place, j'ai un message d'erreur de type "attempt to overwrite"

    2°/ Je voudrais ouvrir le fichier excel pour faire des travaux de lecture ET d'écriture sur une feuille dans la même boucle mais je n'ai pas trouver de fonction le permettant. A l'heure actuelle je suis obligé de fermer le fichier à chaque fois que je veux le consulter avec xlrd et le rouvrir pour écrire (open(fichier,"a").

    Avez-vous des pistes, des solutions ou des astuces concernant ces deux points?

    merci d'avance

    ob

  2. #2
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Citation Envoyé par olivier.breheret Voir le message
    Bonjour à tous,

    J'ai 2 questions concernant le traitement de données dans Excel

    Je travaille sur des feuilles excel avec xlrd et xlwt et je rencontre quelques problèmes pour faire ce que je veux:

    1°/ je n'arrive pas à remplacer une valeur dans une cellule : par exemple si j'ai 1 en A1 et que je veux écrire 2 à la place, j'ai un message d'erreur de type "attempt to overwrite"

    2°/ Je voudrais ouvrir le fichier excel pour faire des travaux de lecture ET d'écriture sur une feuille dans la même boucle mais je n'ai pas trouver de fonction le permettant. A l'heure actuelle je suis obligé de fermer le fichier à chaque fois que je veux le consulter avec xlrd et le rouvrir pour écrire (open(fichier,"a").

    Avez-vous des pistes, des solutions ou des astuces concernant ces deux points?

    merci d'avance

    ob
    J'utilise plutôt des fichiers csv (cela évite les 2 modules) et à chaque fois que j'ai voulu les modifier, j'ai créé des listes et réécrit le fichier avec les options adéquates.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2015
    Messages : 29
    Par défaut
    OK Marco056

    Et le fait de travailler sur des fichiers csv permettrait la lecture Et l'écriture dans la même "session" d'ouverture du fichier? et l'overwrite?

  4. #4
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Il y a pas mal d'exemples.
    Voici la doc :
    https://docs.python.org/3.0/library/csv.html

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2015
    Messages : 29
    Par défaut
    merci

    J'ai pas testé mais j'ai bien l'impression à la lecture de la doc que l'on ne peur que SOIT ecrire SOIT lire mais pas les 2 en simultané.
    va falloir tester un peu ......
    de + la doc est pour python 3.x je suis en 2.7

    en tous cas, merci

    olivier

  6. #6
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    csv existe aussi pour python 2.7 : il y a d'ailleurs plus d'exemples sur le net.
    Pour ce qui est de la réécriture, je suis toujours passé par un "tampon" effectivement.

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2015
    Messages : 29
    Par défaut
    ouais bah c'est bien ça mon problème... être obligé d'ouvrir et de fermer des fichiers sans arrêt à l'intérieur d'une boucle pour, soit les lire, soit les écrire, fait que sur de gros fichiers les temps de traitement deviennent rédhibitoires.
    Je ne sais vraiment plus comment y remédier.....

    Bonne soirée et avis à la population : help me

    olivier

  8. #8
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Explique peut-être plus en détail.
    J'ai travaillé sur de gros fichiers csv mais le traitement se faisait sur les listes une fois les fichiers ouverts.
    A la fin, une fois le traitement terminé, on réécrit le fichier.

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2015
    Messages : 29
    Par défaut
    En fait je lis des données dans un fichier source.
    Je construis une pseudo BDD dans un autre fichier.
    A chaque fois que je lis une donnée, je teste le fichier "BDD" pour savoir si la donnée est déjà présente (LECTURE du fichier BDD)
    Si oui -> un compteur s'incrémente pour cette donnée (ECRITURE du fichier BDD)
    Si non -> ajout de la donnée au fichier BDD (ECRITURE du fichier BDD)
    Ceci en boucle sur 20 à 30 000 lignes

    Comme je n'arrive pas à lire et écrire sur la même ouverture du fichier BDD je suis à chaque fois obligé d'ouvrir/fermer ledit fichier càd 20 à 30 000 fois dans le script : j'ouvre le fichier pour écrire, je ferme le fichier pour pouvoir le lire à nouveau etc...

    Temps d'exécution +++++

    surtout que je dois faire la manoeuvre pour 13 types de données (13 colonnes)

  10. #10
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Citation Envoyé par olivier.breheret Voir le message
    En fait je lis des données dans un fichier source.
    Je construis une pseudo BDD dans un autre fichier.
    A chaque fois que je lis une donnée, je teste le fichier "BDD" pour savoir si la donnée est déjà présente (LECTURE du fichier BDD)
    Si oui -> un compteur s'incrémente pour cette donnée (ECRITURE du fichier BDD)
    Si non -> ajout de la donnée au fichier BDD (ECRITURE du fichier BDD)
    Ceci en boucle sur 20 à 30 000 lignes

    Comme je n'arrive pas à lire et écrire sur la même ouverture du fichier BDD je suis à chaque fois obligé d'ouvrir/fermer ledit fichier càd 20 à 30 000 fois dans le script : j'ouvre le fichier pour écrire, je ferme le fichier pour pouvoir le lire à nouveau etc...

    Temps d'exécution +++++

    surtout que je dois faire la manoeuvre pour 13 types de données (13 colonnes)
    C'est à mon avis le traitement qui est à revoir : une fois le fichier ouvert, on traite puis on referme. Point.

  11. #11
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2015
    Messages : 29
    Par défaut
    C'est justement tout le fond de mon problème.... je souhaiterais effectivement ouvrir le fichier pour le traiter et le refermer à la fin. Mais je n'arrive pas à lire et écrire dans ce fichier sur la même ouverture.
    Je te mets un extrait de mon code...
    Peut-être pourras-tu me dire où est le schmilblick...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    # recherche Bdd Unité (LibelleUf) (2ème colonne de la feuille 2)
    		# Ouverture du fichier pour consultation
    		FichierBdd = xlrd.open_workbook(fichierEcriture) 
    		# Récupération de la feuille Bdd
    		feuil2_2 = FichierBdd.sheet_by_name("feuil2")
    		for index in range(1,200):
    			BddUnite = format(feuil2_2.cell_value(index,1))
    			open(fichierEcriture, "a") # Ouverture du fichier en mode ajout
    			if LibelleUf == BddUnite: # Le libellé Uf existe déjà dans la BDD
    				Rech_Bdd_Unite = index
    				break
    			else:
    				if BddUnite == "": # Le libellé Uf n'existe pas : on l'ajoute à la BDD
    					feuil2.write(index,1,LibelleUf)
    					cptUnite+=1 # permet de compter le nombre d'occurences dans la BDD
    #					feuil2.write(0,1,str(cptUnite)) # Génère une erreur "overwrite" à chaque fois qu'on cherche à écrire ==> transféré à la fin de la boucle
    					Rech_Bdd_Unite = index
    					break
    		feuil3.write(k+1,2,str(Rech_Bdd_Unite))
    		classeur.save(fichierEcriture) # Sauvegarde et fermeture du fichier écriture

  12. #12
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Aurais-tu un extrait de ton fichier excel ?
    Une première remarque : je ne pense pas que csv gère les différentes feuilles...

  13. #13
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2015
    Messages : 29
    Par défaut
    ci-joint le fichier xls
    Fichiers attachés Fichiers attachés

  14. #14
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    J'ai du mal à comprendre ce que tu souhaites vraiment faire avec cela mais voici un petit programme vite fait.
    J'ai enregistré la première feuille de ton fichier excel en format csv sous le nom essai-csv1 avec la tabulation comme séparateur.
    J'ai effectué un petit traitement qui est tout simple pour donner un exemple.
    J'ai réécrit le fichier obtenu sous le nom essai-csv2.
    On peut bien sûr ouvrir plusieurs fichiers csv en même temps.
    En espérant que cela t'aide...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    # -*- coding: utf-8 -*-
     
    import csv
     
    with open("essai-csv1.csv") as mon_fichier:
        global liste
        liste = list(csv.reader((mon_fichier),dialect='excel',delimiter='\t',lineterminator=' '))
    print(liste)
    fichier_cible = open("essai-csv2.csv", "w")
    sortie_w = csv.writer(fichier_cible)
     
    cpt = 0
    for ligne in liste:
        if "_NEUROCHIR ADULT" in ligne[1]:
    		cpt+=1
    		print(ligne)
    		sortie_w.writerow(ligne)
    fichier_cible.close()
    print(cpt)

  15. #15
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Si c'est résolu, ce serait bien de l'indiquer...

  16. #16
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2015
    Messages : 29
    Par défaut
    ça n'est pas résolu sinon je l'aurai indiqué....
    Je veux lire Et écrire dans le même fichier donc non résolu pour l'instant

  17. #17
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 695
    Par défaut
    Salut,

    Citation Envoyé par olivier.breheret Voir le message
    ça n'est pas résolu sinon je l'aurai indiqué....
    Je veux lire Et écrire dans le même fichier donc non résolu pour l'instant
    Pour lire et écrire dans le même fichier, vous pouvez regarder (par exemple) des bibliothèques comme pywin32. Elle permet de travailler directement depuis Python avec excel.
    Vous avez plein d'exemples et tutoriels qui traînent sur le web comme par exemple celui ci.
    Et une documentation intéressante chez Microsoft.

    Vous pouvez aussi regarder l'équivalent LibreOffice qui peut aussi se programmer.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  18. #18
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Citation Envoyé par olivier.breheret Voir le message
    ça n'est pas résolu sinon je l'aurai indiqué....
    Je veux lire Et écrire dans le même fichier donc non résolu pour l'instant

    Ok, désolé.
    Rien n'empêche de lire, traiter et réécrire le fichier avec le même nom, ce qui revient au même, le temps en plus. Sur une machine performante, cela peut être assez rapide.

Discussions similaires

  1. [c#] Lecture/écriture dans un fichier Excel
    Par flzox dans le forum Développement Windows
    Réponses: 4
    Dernier message: 16/11/2010, 10h46
  2. lecture/écriture dans un fichier
    Par benkunz dans le forum Langage
    Réponses: 3
    Dernier message: 10/04/2007, 11h35
  3. Réponses: 47
    Dernier message: 28/01/2007, 19h39
  4. lecture écriture dans un fichier
    Par poukill dans le forum C++
    Réponses: 9
    Dernier message: 23/05/2006, 11h02
  5. [PERL] Problème lecture/écriture dans un fichier
    Par LE NEINDRE dans le forum Langage
    Réponses: 4
    Dernier message: 17/08/2005, 13h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo