Accès fichier texte sur internet via Python

Fermé
getudir78 Messages postés 29 Date d'inscription vendredi 3 janvier 2014 Statut Membre Dernière intervention 2 septembre 2020 - Modifié le 16 déc. 2019 à 17:29
getudir78 Messages postés 29 Date d'inscription vendredi 3 janvier 2014 Statut Membre Dernière intervention 2 septembre 2020 - 17 déc. 2019 à 15:57
Bonjour,

J'utilise Windows 7 , Python 3.80 et Mozilla firefiox

Je récupère un fichier .txt sur internet via Python.

Le processus fonctionne mais au lieu de récupérer les caractères accentués, je récupère leur code UTF-8. Par exemple, au lieu de 'obstinés', je récupère ‘obstin\xc3\xa9s’ .

Je pense que si je pouvais choisir UTF-8 dans Mozilla en passant par ‘Affichage/Encodage du texte’, je n'aurais pas ce problème. Malheureusement, cet onglet est grisé donc inaccessible. Il me semble que le le codage utilisé est celui des langues latines.

J'ai essayé toutes sortes d'artifice qui sont visibles dans le code joint, mais ça n'a rien donné.

D'où mes deux questions :

1 - Voyez-vous un moyen d'activer l'onglet ‘Affichage/Encodage du texte’ ?

2 - Y-a-t-il un moyen simple de remplacer les codes utf-8 du fichier par le caractère qu'ils représentent ?

Je vous remercie par avance pour les éclaircissements que vous pourrez m'apporter.

Cordialement


"""  lecture d'un fichier texte sur internet  """

from urllib.request import urlopen
import encodings
import os
import codecs

# C:\Users\COFFE\Python3.8\python.exe
# coding: encoding
# -*- coding: utf-8 -*-

def ouvrir(chaine_url) :
 # -*- coding: utf-8 -*-
 
 # Mon navigateur Mozilla Firefox 71.0 ne me donne pas accès à Affichage/Encodage du texte qui est grisé
 # Je ne peux donc pas sélectionner utf-8 pour la lecture du fichier sur internet.
 
 code = urlopen(chaine_url)
 return code

def main() :
 """ transformer un texte récupéré sur internet """
 os.chdir('C:\TRANSIT\Python_files_C')
 # -*- coding: utf-8 -*-
 #
 chaine_url = 'https://upylab.ulb.ac.be/pub/data/Zola.txt'
 code = ouvrir(chaine_url)
 #print(code)
 
 # le texte ainsi récupéré d'internet ne respecte pas l'utf-8
 
 livre_url = str(code.read())
 
 j = 0
 for ligne in urlopen(chaine_url).readlines() :
  j += 1
 print ("nb_lignes du fichier sur internet = ",j)
 
 print('\n',"Affichage du fichier lu par python : ")
 print('\n',livre_url)
 
 # Création du fichier texte correspondant :
 # essai d'uisation de codecs et encoding pour récupérer le texte en utf-8 : Ca ne fonctionne pas
 with codecs.open('fich_livre_url.txt',"w", encoding = 'utf-8') as f_l_url : 
  f_l_url.write(livre_url)
 
 # lecture du fichier texte précédemment créé
 # codecs et ecoding ne change rien
 with codecs.open('fich_livre_url.txt',"r", encoding = 'utf-8') as f_l_url_2 :
  texte = f_l_url_2.readlines()
  
 print('\n',"lecture du fichier sauvegardé",'\n')
 i= 0
 for ligne in texte :
  i += 1
  print(ligne)
 f_l_url_2.close()
 print('\n',"nb lignes : ", i)
 
 print('\n',"Conclusion  : les caractères accentués sont remplacés par leur code utf-8")
 print('\n',"Que faire ?")
 
 
if __name__ == '__main__' :
 main()


Configuration: Windows / Firefox 71.0
A voir également:

2 réponses

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 408
16 déc. 2019 à 17:26
Salut,

Concernant l'affichage grisé, une explication ici

1
getudir78 Messages postés 29 Date d'inscription vendredi 3 janvier 2014 Statut Membre Dernière intervention 2 septembre 2020 33
17 déc. 2019 à 15:57
Bonjour,

Merci pour l'info.

Comme malheureusement je ne jongle pas avec Mozilla, je n'ai pas trouvé les équivalents français des rubriques anglaises. Je n'ai donc pas su exécuter le script proposé.
Néanmoins, c'est positif car je sais maintenant que c'est Mozilla qui a retiré cette fonctionnalité et que par conséquent, mon installation de Mozilla n'est pas en cause.
Pour la solution pratique, j'ai utilisé le script Python envoyé par trifou.
L'essentiel est que ton message m'a éclairci les idées.
Cordialement,
0
Bonjour,

urlopen retourne un bytes (consulter la doc), et pour convertir un bytes en str, on utilise bytes.decode.

from urllib.request import urlopen

with urlopen('https://upylab.ulb.ac.be/pub/data/Zola.txt') as f:
    print(f.read().decode())
0