Partage
  • Partager sur Facebook
  • Partager sur Twitter

Ecrire un fichier csv colonne par colonne

Sujet résolu
    11 juillet 2013 à 17:59:13

    Bonjour,

    J'essaie d'extraire certaines colonnes d'un fichier csv et de les écrire sur un autre fichier.

    J'ai écris le code suivant:

    import csv
    
    def selection(inp, outp, delim = ','):
        with open(inp) as input, open(outp, 'w') as out:
            my_reader = csv.reader(input, delimiter = delim)
            my_writer = csv.writer(out, delimiter = delim)
    
            for column in zip(*my_reader):
                l= []
                if column[0] == 'prendre':
                    for k in range(len(column)):
                        l.append(column[k])
                my_writer.writerows(zip(*l))

    Le fichier csv qui est créé ne contient pas du tout ce que je veux qu'il contienne: la première colonne contient des "morceaux de headers" 

    Quelqu'un a une idée sur comment je peux corriger ça?

    -
    Edité par baltam2 11 juillet 2013 à 17:59:31

    • Partager sur Facebook
    • Partager sur Twitter
      11 juillet 2013 à 18:36:14

      Salut baltam2.

      Tu peux t'inspirer du code :

      from sys import stdin, stdout
      from csv import reader, writer
       
      def selection( fr=stdin, fw=stdout, delim=','):
          my_reader = reader(fr, delimiter=delim)
          my_writer = writer(fw, delimiter=delim)
          to_write = [ col for col in zip(*my_reader) if col[0] == 'prendre' ]
          my_writer.writerows(zip(*to_write))
          return
                  
      if __name__ == '__main__':
          from sys import argv
          from time import time
          begin = time()
          
          if len(argv) == 1:
              selection()
          elif len(argv) == 2:
              with open(argv[1],'rb') as src:
                  selection( src)
          elif len(argv) == 3:
              with open(argv[1],'rb') as src, open(argv[2],'wb') as dst:
                  selection( src, dst)
          elif len(argv) == 4:
              with open(argv[1],'rb') as src, open(argv[2],'wb') as dst:
                  selection( src, dst, argv[3])
          else:
              print("Usage: {0} [INFILE [OUTFILE [DELIMITER]]]".format(argv[0]))
              raise SystemExit(1)
      
          end = time()
          print("Successful treatment of '{}' in {:.3f} ms".format( argv[1], 1e3*(end-begin)))
      



      • Partager sur Facebook
      • Partager sur Twitter
        11 juillet 2013 à 18:56:16

        Formidable azertymen ça marche!

        Encore merci!

        • Partager sur Facebook
        • Partager sur Twitter

        Ecrire un fichier csv colonne par colonne

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown