In Python 2.7 und Ubuntu 14.04 I in eine CSV-Datei zu schreiben versuchen:UnicodeEncodeError: 'ascii' Codec kann nicht Zeichenfehler codiert writerow mit und Karte
csv_w.writerow(map(lambda x: flatdata.get(x, ""), columns))
das gibt mir die berüchtigten
UnicodeEncodeError: 'ascii' codec can't encode character u'\u265b' in position 19: ordinal not in range(128)
Fehler.
Die übliche Beratung hier ist unicode(x).encode("utf-8")
ich dies versucht haben, und auch .encode("utf-8")
im get für beide Parameter nur zu verwenden:
csv_w.writerow(map(lambda x: flatdata.get(unicode(x).encode("utf-8"), unicode("").encode("utf-8")), columns))
aber ich immer noch die gleichen Fehler.
Jede Hilfe wird sehr geschätzt, um den Fehler loszuwerden. (Ich stelle mir vor, die unicode("").encode("utf-8")
ist ungeschickt, aber ich bin immer noch ein Newb).
EDIT: Mein vollständige Programm ist:
#!/usr/bin/env python
import json
import csv
import fileinput
import sys
import glob
import os
def flattenjson(b, delim):
val = {}
for i in b.keys():
if isinstance(b[i], dict):
get = flattenjson(b[i], delim)
for j in get.keys():
val[ i + delim + j ] = get[j]
else:
val[i] = b[i]
return val
def createcolumnheadings(cols):
#create column headings
print ('a', cols)
columns = cols.keys()
columns = list(set(columns))
print('b', columns)
return columns
doOnce=True
out_file= open('Excel.csv', 'wb')
csv_w = csv.writer(out_file, delimiter="\t" )
print sys.argv, os.getcwd()
os.chdir(sys.argv[1])
for line in fileinput.input(glob.glob("*.txt")):
print('filename:', fileinput.filename(),'line #:',fileinput.filelineno(),'line:', line)
data = json.loads(line)
flatdata = flattenjson(data, "__")
if doOnce:
columns=createcolumnheadings(flatdata)
print('c', columns)
csv_w.writerow(columns)
doOnce=False
csv_w.writerow(map(lambda x: flatdata.get(unicode(x).encode("utf-8"), unicode("").encode("utf-8")), columns))
Abgefaßtes einzigen Tweet, der den Fehler wirft UnicodeEncodeError: 'ascii' codec can't encode character u'\u2022' in position 14: ordinal not in range(128)
: here verfügbar ist.
LÖSUNG wie von Alistair empfohlen Ich habe Unicodescv installiert. Die Schritte waren: die Zip-Download von here
installieren: sudo pip installieren /path/to/zipfile/python-unicodecsv-master.zip
import unicodecsv as csv
csv_w = csv.writer(f, encoding='utf-8')
csv_w.writerow(flatdata.get(x, u'') for x in columns)
Können Sie ein komplettes Beispiel zeigen, mit Beispieldaten, so dass ich das Problem auf meinem Rechner wiedergeben kann und helfen? – Will
Danke !! Ich habe das Programm hinzugefügt. Die Beispieldaten sind rassistische Tweets! Diese sind 1. rassistisch und 2. haben identifizierende Informationen. Könnte ich ihnen eine E-Mail schicken? – schoon
Ich habe einen einzigen redigierten Tweet auf dropcanvas, Link am Ende der Frage. Danke noch einmal!! – schoon