J'ai besoin de convertir un tas de fichiers en utf-8 en Python, et j'ai des problèmes avec la partie "conversion du fichier".
J'aimerais faire l'équivalent de:
iconv -t utf-8 $file > converted/$file # this is shell code
Merci!
J'ai besoin de convertir un tas de fichiers en utf-8 en Python, et j'ai des problèmes avec la partie "conversion du fichier".
J'aimerais faire l'équivalent de:
iconv -t utf-8 $file > converted/$file # this is shell code
Merci!
Vous pouvez utiliser le module de codecs , comme ceci:
import codecs
BLOCKSIZE = 1048576 # or some other, desired size in bytes
with codecs.open(sourceFileName, "r", "your-source-encoding") as sourceFile:
with codecs.open(targetFileName, "w", "utf-8") as targetFile:
while True:
contents = sourceFile.read(BLOCKSIZE)
if not contents:
break
targetFile.write(contents)
EDIT : ajout du paramètre BLOCKSIZE
pour contrôler la taille du fragment de fichier.
Merci pour les réponses, ça marche!
Et comme les fichiers source sont dans des formats mixtes, j'ai ajouté une liste de formats source à essayer en séquence ( sourceFormats
), et sur UnicodeDecodeError
j'essaie le format suivant:
from __future__ import with_statement
import os
import sys
import codecs
sourceFormats = ['ascii', 'iso-8859-1']
targetFormat = 'utf-8'
outputDir = 'converted'
def convertFile(fileName):
print("Converting '" + fileName + "'...")
for format in sourceFormats:
try:
with codecs.open(fileName, 'rU', format) as sourceFile:
writeConversion(sourceFile)
print('Done.')
return
except UnicodeDecodeError:
pass
print("Error: failed to convert '" + fileName + "'.")
def writeConversion(file):
with codecs.open(outputDir + '/' + fileName, 'w', targetFormat) as targetFile:
for line in file:
targetFile.write(line)
# Off topic: get the file list and call convertFile on each file
# ...
Mais peut-être existe-t-il un meilleur moyen de deviner le format de chaque fichier source?
À votre santé!
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.