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!
3 Réponses :
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>
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.
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'
Avez-vous déjà résolu cela?