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 :

copy.deepcopy(csv.DictReader): TypeError: can't pickle _csv.reader objects


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur généraliste en invalidité, beaucoup d'informatique
    Inscrit en
    Juillet 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur généraliste en invalidité, beaucoup d'informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2019
    Messages : 5
    Par défaut copy.deepcopy(csv.DictReader): TypeError: can't pickle _csv.reader objects
    Bonjour,
    Je cherche à dupliquer un objet csv.reader retourné par csv.DictReader(), en utilisant copy.deepcopy() sans succès.
    Impossible de trouver une piste
    D'avance merci de votre aide

    20190722-ChargeCsvDeepCopy.py :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # Python 3.7.4
    import csv, copy
     
    chemFic = 'CAC_2019-06-28_ALL_MIN-0005 - Partiel.csv'
    with open(chemFic, newline='') as csvfile:
        dr = csv.DictReader(csvfile, delimiter=';')
        for row in dr:
            print(row)
            break
        reader = copy.deepcopy(dr)
    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
    >py 20190722-ChargeCsvDeepCopy.py
     
    OrderedDict([('DATE', '2019-06-28'), ('TIME', '00:00'), ('OPEN', '5501.9'), ('HIGH', '5507.4'), ('LOW', '5501.9'), ('CLOSE', '5504.5')])
     
    Traceback (most recent call last):
      File "20190722-ChargeCsvDeepCopy.py", line 10, in <module>
        reader = copy.deepcopy(dr)
      File "C:\Users\ericg\AppData\Local\Programs\Python\Python37\lib\copy.py", line 180, in deepcopy
        y = _reconstruct(x, memo, *rv)
      File "C:\Users\ericg\AppData\Local\Programs\Python\Python37\lib\copy.py", line 280, in _reconstruct
        state = deepcopy(state, memo)
      File "C:\Users\ericg\AppData\Local\Programs\Python\Python37\lib\copy.py", line 150, in deepcopy
        y = copier(x, memo)
      File "C:\Users\ericg\AppData\Local\Programs\Python\Python37\lib\copy.py", line 240, in _deepcopy_dict
        y[deepcopy(key, memo)] = deepcopy(value, memo)
      File "C:\Users\ericg\AppData\Local\Programs\Python\Python37\lib\copy.py", line 169, in deepcopy
        rv = reductor(4)
    TypeError: can't pickle _csv.reader objects

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 754
    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 754
    Par défaut
    Salut,

    Citation Envoyé par ego37 Voir le message
    Je cherche à dupliquer un objet csv.reader retourné par csv.DictReader(), en utilisant copy.deepcopy() sans succès.
    Si çà ne fonctionne pas simplement, la question à vous poser (et ce que vous devriez expliquer) est pourquoi cherchez à faire çà: il y a certainement plus simple pour le réaliser.

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

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ingénieur généraliste en invalidité, beaucoup d'informatique
    Inscrit en
    Juillet 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur généraliste en invalidité, beaucoup d'informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2019
    Messages : 5
    Par défaut
    Zalut wiztricks,

    Désolé, Je suis débutant.

    Tant que je suis dans le contexte de "with open(chemFic, newline='') as csvfile:", l'objet csv.DictReader est utilisable.
    Mon objectif est de l'instancier dans une méthode puis le conserver dans l'attribut d'un objet.
    Peut-être y-a-t'il d'autres moyens ?

    Merci d'avance

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 754
    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 754
    Par défaut
    Salut,

    Citation Envoyé par ego37 Voir le message
    Tant que je suis dans le contexte de "with open(chemFic, newline='') as csvfile:", l'objet csv.DictReader est utilisable.
    Les variables définies dans le corps du bloc with.... : restent définies à sa sortie (si on y entre).
    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> with open('toto.dat') as z:
    ...      bbb = 1
    ...
    >>> bbb
    1
    Par contre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    >>> del bbb
    >>> with open('totozzzz.dat') as z:
    ...      bbb = 1
    ...
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    FileNotFoundError: [Errno 2] No such file or directory: 'totozzzz.dat'
    >>> bbb
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    NameError: name 'bbb' is not defined
    >>>
    Ceci dit, sorti du block, si vous avez lu les données du fichier, le csv.DictReader ne sert plus à rien.

    Citation Envoyé par ego37 Voir le message
    Mon objectif est de l'instancier dans une méthode puis le conserver dans l'attribut d'un objet.
    Pourquoi faire un copy.deepcopy plutôt que l'assigner à un attribut/variable?

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

  5. #5
    Membre à l'essai
    Homme Profil pro
    Ingénieur généraliste en invalidité, beaucoup d'informatique
    Inscrit en
    Juillet 2019
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur généraliste en invalidité, beaucoup d'informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2019
    Messages : 5
    Par défaut
    Merci wiztricks,
    Pourtant, avec 20190722-ChargeCsv-DataInAttrib.py :
    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
    # Python 3.7.4
    import csv, copy
     
    class maClasse:
        def chargeCSV(self, chemFic):
            with open(chemFic, newline='') as csvfile:
                self.data = csv.DictReader(csvfile, delimiter=';')
                print('== self.data :')
                for row in self.data:
                    print(row)
                    break
     
    monObjet = maClasse()
    monObjet.chargeCSV('CAC_2019-06-28_ALL_MIN-0005 - Partiel.csv')
    print('== monObjet.data :')
    for row in monObjet.data:
        print(row)
        break
    J'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    > py 20190722-ChargeCsv-DataInAttrib.py
    == self.data :
    OrderedDict([('DATE', '2019-06-28'), ('TIME', '00:00'), ('OPEN', '5501.9'), ('HIGH', '5507.4'), ('LOW', '5501.9'), ('CLOSE', '5504.5')])
    == monObjet.data :
    Traceback (most recent call last):
      File "20190722-ChargeCsv-DataInAttrib.py", line 16, in <module>
        for row in monObjet.data:
      File "C:\Users\ericg\AppData\Local\Programs\Python\Python37\lib\csv.py", line 112, in __next__
        row = next(self.reader)
    ValueError: I/O operation on closed file.
    Où ai-je fait fausse route ?
    Merci d'avance

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 754
    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 754
    Par défaut
    Salut,

    Citation Envoyé par ego37 Voir le message
    Où ai-je fait fausse route ?
    Une fois sorti du bloc with..., le fichier est fermé...
    Et c'est pour çà qu'on utilise le "with".

    Donc vous ne pouvez pas d'un côté utiliser "with" et en attendre quelque chose pour lequel il n'a pas été construit... sans que je me pose de questions sur "est-ce que vous comprenez un peu les lignes de code que vous avez écrit?" et vous suggérer d'ouvrir un tuto. pour apprendre les bases de la programmation, revoir ce que sont les fichiers, ....

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

Discussions similaires

  1. Librairy csv.DictReader - Mise en forme
    Par bm dans le forum Général Python
    Réponses: 3
    Dernier message: 16/11/2016, 19h18
  2. [Python 3.X] TypeError: can't multiply sequence by non-int of type 'function'
    Par segolsed dans le forum Général Python
    Réponses: 11
    Dernier message: 12/06/2016, 11h24
  3. COPY FROM + CSV + les titres des colonnes ?
    Par logiclogic dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 22/01/2013, 13h35
  4. [XL-2010] Copie fichier csv dans feuilles xlsm
    Par pdufranc dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 04/10/2012, 11h33
  5. copy.deepcopy et AttributeError
    Par quiscoul dans le forum Général Python
    Réponses: 2
    Dernier message: 06/11/2008, 08h03

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