Python: supprimer les caractères non ascii de csv
J'ai un fichier csv seulement 4 des 4000 enregistrements ont des caractères non-ASCII. Par example
['com.manager', '2016012300', '16.1.23', 'en', 'kinzie', '2015-04-11T17:36:23Z', '1428773783781', '2016-03-11T09:53:45Z', 'df', '5', "\xa5\x06`'", '\xc0\x03"', '\xa2{\xac ===]\xa9}\xf7\xf7\xf7\xf7\xf7\xf7\xf7\xf7\xf7\xf7\xf7\xf7\xf7>', '', '', '', 'https://play.google.com/apps/publish?account=sd#ReviewDetailsPlace:p=com.manager&reviewid=gp:AOqpTOEcQQGmjFcd-bFfU372DTrxh']
J'utilise le code python suivant pour lire le csv
with open('/Users/duttaam/Downloads/test1.csv', 'rU') as csvfile:
reader_obj = csv.reader(x.replace('\0', '') for x in csvfile)
rownum=0
for row in reader_obj:
rownum += 1
if len(row) != 16:
print rownum
print row
Pour quatre lignes, le lecteur affiche des numéros de colonne incohérents. Mais quand j'ai compté les délimiteurs (,) dans ces lignes, cela montre bien. Le seul problème que j'ai pu voir est celui des caractères non ascii comme l'exemple de ligne montré dans la ligne ci-dessus. Je suppose que ce sont des emojis convertis en caractères.
J'ai proposé une fonction pour supprimer les caractères non imprimables de la chaîne, comment puis-je l'appliquer à l'ensemble du csv? (Merci au post suivant: Suppression des caractères non imprimables d'une chaîne en python )
def removeSpecialcahr(s):
printable = set(string.printable)
return filter(lambda x: x in printable, s)
Existe-t-il un moyen de traiter le csv et de supprimer tous les caractères non imprimables et / ou non ascii?
Pour supprimer les caractères non ASCII de votre fichier, remplacez votre open
appel par codecs.open()
. Vous pouvez également définir votre propre gestionnaire d'erreurs ...:
import codecs
codecs.open('file.csv', 'r', encoding='ascii', errors='ignore')