Python: Pourquoi suis-je un UnicodeDecodeError?
J'ai le code suivant qui recherche par le biais de fichiers à l'aide de RE, et si des correspondances sont trouvées, il déplacer le fichier dans un répertoire différent.
import os
import gzip
import re
import shutil
def regEx1():
os.chdir("C:/Users/David/myfiles")
files = os.listdir(".")
os.mkdir("C:/Users/David/NewFiles")
regex_txt = input("Please enter the string your are looking for:")
for x in (files):
inputFile = open((x), "r")
content = inputFile.read()
inputFile.close()
regex = re.compile(regex_txt, re.IGNORECASE)
if re.search(regex, content)is not None:
shutil.copy(x, "C:/Users/David/NewFiles")
Quand je le lance j'ai le message d'erreur suivant:
Traceback (most recent call last):
File "<interactive input>", line 1, in <module>
File "C:\Python33\Lib\encodings\cp1252.py", line 23, in decode
return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x9d in position 367: character maps to <undefined>
Svp quelqu'un pourrait-il expliquer pourquoi ce message s'affiche
Vous devez vous connecter pour publier un commentaire.
En python 3, lorsque vous ouvrez un fichier pour la lecture en mode texte (
r
) il va décoder le contenu du texte en unicode.Puisque vous n'avez pas spécifié de quel encodage à utiliser pour lire le fichier, la plate-forme par défaut (à partir de
paramètres régionaux.getpreferredencoding
) est utilisé, et qui ne parvient pas dans ce cas.Vous devez spécifier un encodage peut décoder le contenu du fichier, ou d'ouvrir le fichier en mode binaire à la place (et l'utilisation
b''
octets motifs pour vos expressions régulières).Voir le Python Unicode HOWTO pour plus d'informations.
open(fname, mode, encoding='whatever')
, Python 2 acodecs.open(fname, mode, encoding='whatever')
inputFile = open(…)
ligne pour spécifier l'encodage de fichier car il n'est clairement pas dansCP1252
(UTF-8
peut-être?).open(file, encoding='the_proper_file_encoding')
.chardet2
pour faire une supposition éclairée. Il ne sera pas 100% infaillible dans la détection de bien.Je ne suis pas trop familier avec python 3x, mais le ci-dessous peuvent ne pas fonctionner.
SyntaxError: non-keyword arg after keyword arg
Il y a une question similaire ici:
Python: Traceback codecs.charmap_decode(d'entrée,de soi.les erreurs,decoding_table)[0]
Mais vous pourriez vouloir essayer:
Merci beaucoup pour cette solution. Il m'aide pour un autre sujet, j'ai utilisé :
et j'ai eu cette erreur parce que j'ai ce symbole dans un commentaire de DIP6.py :
Il fonctionne très bien avec :
Elle résout également un problème avec :
dans DIP6.py
J'ai eu :
dans la console.
Merci 🙂 .