2
votes

bibliothèque geograpy3 pour extraire les emplacements dans le texte, donne UnicodeDecodeError: le codec 'charmap' ne peut pas décoder l'octet 0x8d en position 276

J'essaye d'extraire l'emplacement du texte en utilisant la bibliothèque geography3 en python.

with open("GeoLite2-City-Locations.csv", encoding="utf-8") as info:
      reader = csv.reader(info)
      for row in reader:
          print(row)

À laquelle j'obtiens l'erreur ci-dessous UnicodeDecodeError:

with open(cur_dir + "/data/GeoLite2-City-Locations.csv", encoding="utf-8") as info:

Après quelques recherches, j'ai essayé de modifier le fichier places.py et a ajouté encoding = "utf-8" dans la ligne -----> 30

 ~\Anaconda\lib\site-packages\geograpy\places.py in populate_db(self)
 28         with open(cur_dir + "/data/GeoLite2-City-Locations.csv") as info:
 29             reader = csv.reader(info)
---> 30             for row in reader:
 31                 print(row)
 32                 cur.execute("INSERT INTO cities VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?);", row)

~\Anaconda\lib\encodings\cp1252.py in decode(self, input, final)
 21 class IncrementalDecoder(codecs.IncrementalDecoder):
 22     def decode(self, input, final=False):
---> 23         return 
 codecs.charmap_decode(input,self.errors,decoding_table)[0]
 24 
 25 class StreamWriter(Codec,codecs.StreamWriter):

UnicodeDecodeError: 'charmap' codec can't decode byte 0x8d in position 276: character maps to <undefined>

Mais cela me donne toujours la même erreur. J'ai également essayé d'enregistrer le GeoLite2-City-Locations.csv sur mon bureau, puis j'ai essayé de le lire en utilisant le même code.

import geograpy
address = 'Jersey City New Jersey 07306'
places = geograpy.get_place_context(text = address)

qui fonctionne parfaitement et imprime tous les lignes du fichier GeoLite2-City-Locations.csv. Je ne comprends pas le problème!


1 commentaires

Avez-vous déjà résolu cela?


3 Réponses :


0
votes

vous devez spécifier encoding encoding = 'utf-8' comme vous l'avez fait, bien que dans la méthode correct_country_mispelling (self, s) dans places.py (49 lignes) < / p>


0 commentaires

0
votes

Après quelques recherches, il s'agit d'une erreur Windows vs Linux dans certains cas. Même en utilisant

with open(cur_dir + "/data/GeoLite2-City-Locations.csv", encoding="utf-8") as info:

, je n'ai pas pu résoudre l'erreur sur mon ordinateur Windows. Cependant, le même code fonctionnait bien sur un ordinateur Linux que j'utilise également. J'ai regardé dans le fichier City-Locations.csv sous Linux, et il est apparu que LibreOffice avait automatiquement encodé et / ou résolu tous les caractères. Alors qu'en regardant le même fichier dans Excel, j'aurais toujours tous les caractères géniaux à l'origine de l'erreur. Excel, pour une raison quelconque, insiste pour conserver les caractères impairs.


0 commentaires

1
votes

En tant que commettant de geograpy3 pour reproduire votre problème, j'ai ajouté un test au geograpy3 le plus récent https://github.com/somnathrakshit/geograpy3/blob/master/tests/test_extractor.py :

avec le résultat:

def testStackoverflow54077973(self):
        '''
        see https://stackoverflow.com/questions/54077973/geograpy3-library-for-extracting-the-locations-in-the-text-gives-unicodedecodee
        '''
        address = 'Jersey City New Jersey 07306'
        e=Extractor(text=address)
        e.find_entities()
        self.check(e.places,['Jersey','City'])

vous pouvez donc simplement passer à la dernière version.

['Jersey', 'City'


0 commentaires