Comment puis-je convertir LF à CRLF?
J'ai trouvé une liste de la plupart des mots anglais en ligne, mais les sauts de ligne sont de type unix (encodés en Unicode: UTF-8). Je l'ai trouvé sur ce site: http://dreamsteep.com/projects/the-english-open-word-list.html
Comment puis-je convertir les sauts de ligne pour CRLF afin que je puisse effectuer une itération sur eux? Le programme que je vais utiliser en va à travers chaque ligne dans le fichier, de sorte que les mots doivent être d'un par ligne.
C'est une partie du fichier: bitbackbitebackbiterbackbitersbackbitesbackbitingbackbittenbackboard
Il devrait être:
bit
backbite
backbiter
backbiters
backbites
backbiting
backbitten
backboard
Comment puis-je convertir mes fichiers de ce type? Remarque: il est 26 de fichiers (un par lettre) avec 80 000 mots au total (de sorte que le programme devrait être très rapide).
Je ne sais pas par où commencer, parce que je n'ai jamais travaillé avec unicode. Merci à l'avance!
À l'aide de rU
en tant que paramètre (comme l'a suggéré), avec ceci dans mon code:
with open(my_file_name, 'rU') as my_file:
for line in my_file:
new_words.append(str(line))
my_file.close()
J'obtiens cette erreur:
Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
addWords('B Words')
File "D:\my_stuff\Google Drive\documents\SCHOOL\Programming\Python\Programming Class\hangman.py", line 138, in addWords
for line in my_file:
File "C:\Python3.3\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 0x8d in position 7488: character maps to <undefined>
Quelqu'un peut-il m'aider?
Ne pouvez-vous pas faire votre programme capable de gérer les deux types de fin de ligne?
J'ai déjà un fichier avec une liste de mots. En outre, je n'ai jamais utilisé unicode (comme il dit) donc je ne sais pas comment gérer ces types de terminaisons.
Dans unix, utilisez la commande sed
OriginalL'auteur Rushy Panchal | 2012-12-19
Vous devez vous connecter pour publier un commentaire.
Au lieu de la conversion, vous devriez être en mesure de simplement ouvrir le fichier à l'aide de Python universelle de retour à la ligne de support:
(Note de l'
U
.)OriginalL'auteur NPE
Vous pouvez utiliser la méthode replace de chaînes de caractères. Comme
EDIT :
dans votre cas :
OriginalL'auteur dugres
Vous n'avez pas besoin de convertir les fins de ligne dans les fichiers afin d'être en mesure d'effectuer une itération sur eux. Comme suggéré par NPE, il suffit d'utiliser python universelle des retours à la ligne en mode.
La UnicodeDecodeError se produit car les fichiers en cours de traitement sont encodés en UTF-8 et lorsque vous essayez de décoder le contenu des octets d'une chaîne, via
str(line)
, Python est à l'aide de lacp1252
codant pour convertir les octets lus à partir du fichier en Python 3 chaîne (c'est à dire une séquence de points de code unicode). Cependant, il y a des octets dans les fichiers qui ne peuvent pas être décodées avec lacp1252
de codage, et qui entraîne un UnicodeDecodeError.Si vous modifiez
str(line)
àline.decode('utf-8')
vous ne devrait plus se le UnicodeDecodeError. Découvrez la Texte Vs. Les données de la Place de l'Unicode Vs. 8-bit article pour plus de détails.Enfin, vous pouvez également trouver Le Minimum Absolu que Tout Développeur Doit Absolument, Positivement Savoir Sur Unicode et les Jeux de Caractères (Pas d'Excuses!) par Joel Spolsky utile.
OriginalL'auteur Eric Rahmig