web-dev-qa-db-fra.com

UnicodeEncodeError: le codec 'ascii' ne peut pas coder le caractère u '\ u2019' en position 6: l'ordinal n'est pas dans la plage (128)

J'essaye de tirer une liste de 500 restaurants à Amsterdam de TripAdvisor; cependant, après le 308e restaurant, j'obtiens l'erreur suivante:

Traceback (most recent call last):
  File "C:/Users/dtrinh/PycharmProjects/TripAdvisorData/LinkPull-HK.py", line 43, in <module>
    writer.writerow(rest_array)
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2019' in position 6: ordinal not in range(128)

J'ai essayé plusieurs choses que j'ai trouvées sur StackOverflow, mais rien ne fonctionne pour le moment. Je me demandais si quelqu'un pouvait jeter un œil à mon code et voir des solutions potentielles qui seraient formidables.

        for item in soup2.findAll('div', attrs={'class', 'title'}):
            if 'Cuisine' in item.text:
                item.text.strip()
                content = item.findNext('div', attrs=('class', 'content'))
                cuisine_type = content.text.encode('utf8', 'ignore').strip().split(r'\xa0')
        rest_array = [account_name, rest_address, postcode, phonenumber, cuisine_type]
        #print rest_array
        with open('ListingsPull-Amsterdam.csv', 'a') as file:
                writer = csv.writer(file)
                writer.writerow(rest_array)
    break
8
dtrinh

Le rest_array Contient des chaînes unicode. Lorsque vous utilisez csv.writer Pour écrire des lignes, vous devez sérialiser les chaînes d'octets (vous êtes sur Python 2.7).

Je vous suggère d'utiliser l'encodage "utf8":

with open('ListingsPull-Amsterdam.csv', mode='a') as fd:
    writer = csv.writer(fd)
    rest_array = [text.encode("utf8") for text in rest_array]
    writer.writerow(rest_array)

remarque: veuillez ne pas utiliser file comme variable car vous masquez la fonction intégrée file() (un alias de open() function).

Si vous souhaitez ouvrir ce fichier CSV avec Microsoft Excel, vous pouvez envisager d'utiliser un autre encodage, par exemple "cp1252" (il autorise le caractère u "\ u2019").

13
Laurent LAPORTE

Vous écrivez un ou des caractères non ascii dans votre fichier de sortie csv. Assurez-vous d'ouvrir le fichier de sortie avec l'encodage de caractères approprié qui permet d'encoder les caractères. Une valeur sûre est souvent UTF-8. Essaye ça:

with open('ListingsPull-Amsterdam.csv', 'a', encoding='utf-8') as file:
    writer = csv.writer(file)
    writer.writerow(rest_array)

modifier c'est pour Python 3.x, désolé.

4
Irmen de Jong