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 :

manipulation de fichier csv et txt en même temps, heelpe


Sujet :

Python

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Mars 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 20
    Points : 6
    Points
    6
    Par défaut manipulation de fichier csv et txt en même temps, heelpe
    Bonjour

    le but de mon code étant de remplacer les éléments d'un fichier txt par d'autre élément du fichier csv

    Je dois faire un code me permettant de parcourir les mots d'un fichier sous format .txt et de comparer ses mots avec le contenu des lignes d'un fichier csv /cellule row[0] et dans le cas ou ils sont identiques, remplacer le mot par row[2]

    Le problème c'est que mon code ne passe par la boucle row in reader qu'une fois

    Voici mon code
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    #!/usr/bin/python
    # vim: set fileencoding=utf-8 :
     
     
    import csv, sys, os,re
     
     
     
     
    #traitement fichier txt
    annotation=open("/home/amal/Bureau/annotation2.txt", "w")
    fd=open("/home/amal/Bureau/test.txt", "r")
    lines=[re.split("\W+", x) for x in fd.readlines()]
     
    mot=0
    rows=0
    line=0
    #manipulation  fichier csv  et fichier txt
    fname = "tes_annotation.csv"
    file = open(fname, "rb")
    reader = csv.reader(file)
     
    for ligne in lines:	#parcourir ligne par ligne le premier fichier	
     
    	print ("line :"+ str(line))
     
    	if  (ligne[0]=="Gene"):
     
    			line+=1
    			print ligne
    			print "ligne  commence  par Gene"
    			print ("len(ligne)) ="  +str(len(ligne))) 
    			for mot in range(len(ligne)-1):#pour chauqe mot du ligne du fichier 1	
    				#print ligne[mot]
    				rows=0
    				for row in reader:
    				       #print row
    					print ("row[0], row[2], ligne[mot]  :" + " "+  row[0] + " "+ row[2] + " "+  ligne[mot])
    					rows+=1 
    					print rows
    					print "rows"
    					if row[0]==ligne[mot]:
    						    #print "row[2]"
    						    #print row[2]
    						    #ligne[mot]=row[2]
    						    print "pas eqivalane dans la list"
    						    #ligne_transforme = ligne_transforme + ligne[mot]
     
     
    					elif not row[0]==ligne[mot] :
    						    ###ligne_transforme = ligne_transforme + ligne[mot]
    				                    print "pas eqivalane dans la list"
     
     
    					  ##annotation.write(" ".join(ligne_transforme))		
    					  ##annotation.write("\n")
    			mot+=1
    			print "mot :"
    			print mot
     
     
     
    	else :					  
     
    		    print "ligne ne commence pas par Gene"
    		    print ligne
     
     
    ##file.close()
    ##fd.close()
    ##annotation.close()
    Je vous remercie

  2. #2
    Membre expérimenté Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Points : 1 481
    Points
    1 481
    Par défaut
    bonjour

    en regardant en diagonale le code, je me demande si je n'ai pas fait un "double bingo" ... voir cette discussion récente.
    "La simplicité ne précède pas la complexité, elle la suit." - Alan J. Perlis
    DVP ? Pensez aux cours et tutos, ainsi qu'à la FAQ !

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Mars 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 20
    Points : 6
    Points
    6
    Par défaut Bonjour
    Merci pour ta réponse:
    c'est vrai que c'est à peu près ce que je fais à la différence que moi je parcours en parallèle un txt et un csv
    j'ai modifié le code
    mais malheureusement il fait qu'uune seule itération des row avec le premier mot et après il rentre plus dans la boucle qui parcours le csv
    !!!!!
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
     
     
    import csv, sys, os, re
     
     
    #traitement fichier txt
    annotation=open("/home/amal/Bureau/annotation2.txt", "w")
    fd=open("/home/amal/Bureau/test.txt", "r")
    lines=[re.split("\W+", x) for x in fd.readlines()]
     
     
    #manipulation  fichier csv  et fichier txt
    fname = "tes_annotation.csv"
    file = open(fname, "rb")
    reader = csv.reader(file)
     
    def parcour():
      for ligne in lines:	#parcourir ligne par ligne le premier fichier	
    	if  (ligne[0]=="Gene"):
     
    			for mot in ligne:#pour chauqe mot du ligne du fichier 1				
    				for row in reader:
    					if row[0]==mot:
    						    print " eqiuivalant dans la list"
     
    					elif not row[0]==mot :
     
    				                    print "pas equivalant dans la list"
     
    	else :					  
     
    		    print "ligne ne commence pas par Gene"
    		    print ligne
     
    parcour()

  4. #4
    Membre expérimenté Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Points : 1 481
    Points
    1 481
    Par défaut
    à la différence que moi je parcours en parallèle un txt et un csv
    oui mais c'est du détail. Foncièrement, il n'y a aucune différence.

    Ta boucle "for row in reader" épuise le fichier "tes_annotations.csv". Quand tu fais une autre itération sur "lines" for mot in ligne à la ligne 22, ce fichier (le pointeur courant) n'a pas bougé d'un iota : il est en bout de course (en butée sur la fin de fichier).

    Insère un "file.seek(0)" à la ligne 21 23 du dernier code et observe... (file est un peu malheureux : c'est le type des "fichiers" en python)

    [EDIT] ton "à la différence que moi je parcours en parallèle un txt et un csv"me laisse à penser que tu ne vois pas où est le problème

    Pour enfoncer le clou, voilà ce qui t'arrive :

    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
    >>> import csv
    >>> fichier = open('fichier.csv')
    >>> reader = csv.reader(fichier,delimiter=';')
    >>> for i in range(4):
    ...     print "iteration", i, "offset", fichier.tell()
    ...     for row in reader:
    ...             print row
    ... 
    iteration 0 offset 0
    ['un', '1', '1.0']
    ['deux', '2', '2.0']
    ['trois', '3', '3.0']
    iteration 1 offset 32
    iteration 2 offset 32
    iteration 3 offset 32
    et voilà comment contourner le problème :

    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
    21
    22
    23
    24
    >>> fichier = open('fichier.csv')
    >>> reader = csv.reader(fichier,delimiter=';')
    >>> for i in range(4):
    ...     print "iteration", i, "offset", fichier.tell()
    ...     for row in reader:
    ...             print row
    ...     fichier.seek(0)
    ... 
    iteration 0 offset 0
    ['un', '1', '1.0']
    ['deux', '2', '2.0']
    ['trois', '3', '3.0']
    iteration 1 offset 0
    ['un', '1', '1.0']
    ['deux', '2', '2.0']
    ['trois', '3', '3.0']
    iteration 2 offset 0
    ['un', '1', '1.0']
    ['deux', '2', '2.0']
    ['trois', '3', '3.0']
    iteration 3 offset 0
    ['un', '1', '1.0']
    ['deux', '2', '2.0']
    ['trois', '3', '3.0']
    "La simplicité ne précède pas la complexité, elle la suit." - Alan J. Perlis
    DVP ? Pensez aux cours et tutos, ainsi qu'à la FAQ !

Discussions similaires

  1. Comment convertir un fichier Excel en fichier csv ou txt ?
    Par djibril dans le forum Téléchargez
    Réponses: 0
    Dernier message: 31/05/2011, 19h04
  2. Manipulation de fichier csv
    Par midgard30 dans le forum Général VBA
    Réponses: 2
    Dernier message: 12/08/2008, 06h35
  3. [CSV] Comment manipuler un fichier csv ?
    Par gorgoroth dans le forum Langage
    Réponses: 5
    Dernier message: 20/03/2008, 22h35
  4. Ecrire dans un fichier .csv ou .txt à partir d'excel
    Par Beamish dans le forum Macros et VBA Excel
    Réponses: 22
    Dernier message: 02/03/2007, 12h16

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