Partage
  • Partager sur Facebook
  • Partager sur Twitter

ouverture d'un fichier csv

    21 janvier 2020 à 0:36:59

    Bonjour,

    dans un code j'ai besoin d'ouvrir une image NB, d'en récupéré le nombre de pixel en fonction de sa nuance de gris, et d'écrire les occurrences dans un fichier csv :

    from PIL.Image import *
    import csv
    
    pixels_valor = [0 for i in range(256)]
    print(pixels_valor)
    picture_or = open("paneau_nb.png")
    (l, h) = picture_or.size
    
    for i in range (h):
      for j in range (l):
        pix = Image.getpixel(picture_or, (i, j))
        pixels_valor[pix[0]] += 1
    
    fichier = open("histo.csv", "w", newline="")
    f = csv.writer(fichier)
    f.writerow(["niveau_gris", "nb_pixels"])



    le problème est que quand j'ouvre mon fichier csv, il y a une erreur qui me dit :  with open('histo.csv', 'w', newline='') as csvfile:

    TypeError: open() got an unexpected keyword argument 'newline'

    je ne sais pas d'où est-ce que ca peut venir, la syntaxe m'a l'air bonne :/ I need help please :)

    -
    Edité par Elfepee8031 21 janvier 2020 à 0:38:48

    • Partager sur Facebook
    • Partager sur Twitter
      21 janvier 2020 à 1:12:24

      L'ouverture du fichier avec l'option newline n'est pas compatible avec l'écriture d'un fichier csv, il faudra faire comme ceci je pense,

      with open("histo.csv", "wb") as f:
          fwriter = csv.writer(f)
          # ...
      
      

      with open est mieux que open, il sécurise la fermeture du fichier après écriture, plus besoin d'utiliser close.

      • Partager sur Facebook
      • Partager sur Twitter

      Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
      La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

        21 janvier 2020 à 9:14:38

        non wb pour éviter newline
        • Partager sur Facebook
        • Partager sur Twitter

        Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
        La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

          21 janvier 2020 à 9:18:19

          Le module csv ne fonctionne pas en mode wb
          • Partager sur Facebook
          • Partager sur Twitter
            21 janvier 2020 à 9:32:48

            • Partager sur Facebook
            • Partager sur Twitter

            Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
            La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

              21 janvier 2020 à 10:08:48

              Mais quand j'essaye ton code ça fait TypeError ...

              >>> with open("test.csv", "wb") as f:
              ...     writer = csv.writer(f)
              ...     writer.writerow(["toto", "tata"])
              ... 
              Traceback (most recent call last):
                File "<stdin>", line 3, in <module>
              TypeError: a bytes-like object is required, not 'str'
              


              Ton lien date, c'est probablement du python2.

              -
              Edité par thelinekioubeur 21 janvier 2020 à 10:09:19

              • Partager sur Facebook
              • Partager sur Twitter
                21 janvier 2020 à 10:52:28

                Oui c'est possible

                • Partager sur Facebook
                • Partager sur Twitter

                Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
                La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

                  21 janvier 2020 à 11:09:14

                  Bonjour,

                  il me semble que le b dans wb signifie que tu veux écrire des bytes, si ce n'est pas le cas, tu dois bien utiliser 'w', si tu veux travailler avec des objects ou des bytes, tu dois les encoder, puis décoder à la récupération pour les lires.

                  • Partager sur Facebook
                  • Partager sur Twitter
                    21 janvier 2020 à 13:19:37

                    merci pour vos réponses, j'ai essayé vos solutions et j'obtiens ceci :/ 

                    Traceback (most recent call last):
                      File "c:/Users/trist/Documents/cours/isn/aide lulu/colo.py", line 14, in <module>
                        with open("histo.csv", "w") as f:
                      File "C:\Users\trist\AppData\Local\Programs\Python\Python38-32\lib\site-packages\PIL\Image.py", line 2794, in open
                        raise ValueError("bad mode %r" % mode)
                    ValueError: bad mode 'w'



                    • Partager sur Facebook
                    • Partager sur Twitter
                      21 janvier 2020 à 13:33:49

                      C'est ton import * qui écrase open.

                      Fait comme ceci :

                      from PIL import Image
                      
                      picture_or = Image.open("paneau_nb.png")  # Image.open pour ouvrir l'image
                      
                      ...
                      
                      with open("histo.csv", "w") as f:  # open pour ouvrir le csv
                          ...



                      • Partager sur Facebook
                      • Partager sur Twitter
                        21 janvier 2020 à 13:41:08

                        Ok je vois, par contre j'obtiens cette erreur pour getpixel :/

                        File "c:/Users/trist/Documents/cours/isn/aide lulu/colo.py", line 11, in <module>
                            pix = getpixel(picture_or, (i, j))
                        NameError: name 'getpixel' is not defined



                        • Partager sur Facebook
                        • Partager sur Twitter
                          21 janvier 2020 à 13:45:07

                          pareil, il faut mettre Image.getpixel
                          • Partager sur Facebook
                          • Partager sur Twitter
                            21 janvier 2020 à 13:48:21

                            j'ai mis le mauvais code erreur, j'avais essayé sans parce que ça marchait pas :

                            File "c:/Users/trist/Documents/cours/isn/aide lulu/colo.py", line 11, in <module>
                                pix = Image.getpixel(picture_or, (i, j))
                            AttributeError: module 'PIL.Image' has no attribute 'getpixel'



                            • Partager sur Facebook
                            • Partager sur Twitter
                              21 janvier 2020 à 13:59:13

                              D'après la doc tu dois faire

                              picture_or.get_pixel((i, j))



                              • Partager sur Facebook
                              • Partager sur Twitter

                              ouverture d'un fichier csv

                              × 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