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 :

Ouvrir un fichier en chinois dans Spider


Sujet :

Python

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 299
    Points : 63
    Points
    63
    Par défaut Ouvrir un fichier en chinois dans Spider
    Bonjour,

    Pour utiliser du Chinois dans la lecture de fichier sur Python :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    # -*- coding: utf-8 -*-
    with open("1300001717.txt", "rb") as f:
        print(f.read().decode('gb2312','ignore'))

  2. #2
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    Quelle version python as-tu ?
    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)

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 299
    Points : 63
    Points
    63
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    Quelle version python as-tu ?
    Merci
    J'ai téléchargé la dernière version de anaconda, j'ai utilise Spyder, il y a écrit Python 3.6

  4. #4
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    Normalement tu ne devrais pas avoir de problème pour lire du chinois avec cette version...

    Essayes de forcer l'encodage en te mettant en mode binaire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    with open('monfichier.txt', 'rb') as f:
        content = f.read() # bytes
        print(content.decode('utf8')) # str
    Mais normalement il n'y a pas besoin de cet artifice avec python 3.x, l'unicode est supporté d'origine.
    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)

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 299
    Points : 63
    Points
    63
    Par défaut
    Avec decode j'ai une erreur :
    print(contenu.decode('utf8'))
    AttributeError:
    'str' object has no attribute 'decode'

    Et sinon quand je fais ce code suivant ca me mets pas les caracteres chinois mais ce que j'aiu deja decrit au dessus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    fichier = open("test.txt", "r")
    contenu = fichier.read()
    contenu2 = contenu
    print(contenu)
    print(contenu.encode('utf8'))
    print(contenu2.encode('utf8').decode('utf8'))
    fichier.close()

  6. #6
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    J'ai pas mis le mode "r" mais le mode "rb".
    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)

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 299
    Points : 63
    Points
    63
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    J'ai pas mis le mode "r" mais le mode "rb".
    Autant pour moi !
    Resultat :
    UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb3 in position 0: invalid start byte

  8. #8
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    Mouais j'ai un petit doute, essayes voir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    with open("test.txt", encoding="latin-1") as f:
        print(f.read())
    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)

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 299
    Points : 63
    Points
    63
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    with open("test.txt", encoding="latin-1") as f:
        print(f.read())
    Jai exactement execute ce code et jai un retour du genre ÐÒìÒ飬ÇëÔÚÏÂÒ»½ .....etc....

  10. #10
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    Dernière solution

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    with open("test.txt") as f:
        print(f.read().decode('gb2312','ignore').encode('UTF-8'))
    EDIT: Peut-être faudra-t-il le mode 'rb' si cela ne fonctionne pas...
    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)

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 299
    Points : 63
    Points
    63
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    # -*- coding: utf-8 -*-
    with open("test.txt") as f:
        print(f.read().decode('gb2312','ignore').encode('UTF-8'))
    print(f.read().decode('gb2312','ignore').encode('UTF-8'))
    AttributeError: 'str' object has no attribute 'decode'

  12. #12
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    Voir mon edit du topic ci-dessus
    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)

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 299
    Points : 63
    Points
    63
    Par défaut
    Jai oublie de preciser que "rb" me donne des trucs du genre

    xb0\x9d\x80:\xe4\xe5\x9b\

  14. #14
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    C'est normal ça te renvoie des bytes, mais pour avoir du type str, il faut utiliser la méthode decode...

    Normalement, tu vas devrais pas utiliser cette manière de faire, python 3.x utilise l'unicode.
    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)

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 299
    Points : 63
    Points
    63
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    # -*- coding: utf-8 -*-
     
    with open("1300001717.txt", "rb") as f:
        print(f.read().decode('gb2312','ignore'))
    Genial merci bcp !!!

  16. #16
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    Ouais c'est la solution que j'ai proposé ICI.
    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)

  17. #17
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Pourquoi écrire f.read().decode('gb2312','ignore').encode('UTF-8') plutôt que f.read().decode('ascii','ignore').encode('UTF-8') ?
    Dans les deux cas, on va obtenir un résultat non intègre - puisqu'on vire tout ce qui n'est pas "conforme" - et pas forcément utilisable.

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

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2013
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2013
    Messages : 299
    Points : 63
    Points
    63
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    Ouais c'est la solution que j'ai proposé ICI.
    J'ai du enlever le encode ut8 parce que sinon jai TypeError: a bytes-like object is required, not 'str'

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ouvrir un fichier PDF existe dans un ressource
    Par aliwassem dans le forum Composants VCL
    Réponses: 0
    Dernier message: 25/06/2009, 20h45
  2. Réponses: 8
    Dernier message: 19/09/2008, 15h54
  3. Réponses: 6
    Dernier message: 18/05/2006, 09h29
  4. [Kylix] Ouvrir un fichier en étant dans KYLIX
    Par Jackepsi dans le forum EDI
    Réponses: 2
    Dernier message: 05/11/2002, 15h59

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