-Comme il est difficile de vérifier et de définir le code de caractère à chaque lecture du fichier, j'ai créé un module pour l'acquérir automatiquement. -Il est particulièrement utile lors de l'importation de fichiers csv contenant du japonais créé dans Excel. -Il prend également en charge l'importation de fichiers sur le net. -En définissant la valeur de retour sur l'encodage au moment de l'ouverture, cela fonctionne sans problème jusqu'à présent.
def check_encoding(file_path):
'' 'Récupère le code de caractère du fichier' '' from chardet.universaldetector import UniversalDetector import requests
detector = UniversalDetector()
if file_path[:4] == 'http':
r = requests.get(file_path)
for binary in r:
detector.feed(binary)
if detector.done:
break
detector.close()
else:
with open(file_path, mode='rb') as f:
for binary in f:
detector.feed(binary)
if detector.done:
break
detector.close()
print(" ", detector.result, end=' => ')
print(detector.result['encoding'], end='\n')
return detector.result['encoding']
-Il semble que csv, y compris le japonais, ait beaucoup de Shift_JIS, il semble donc préférable de le convertir en cp932 plus polyvalent dans le prochain modèle. -En entrant la valeur de retour obtenue dans le premier modèle comme argument, le nom de code de caractère optimal peut être obtenu comme valeur de retour.
def change_encoding(encoding):
'' 'Convertir la relation d'encodage sjis en cp932' '' if encoding in ['Shift_JIS', 'SHIFT_JIS', 'shift_jis', 'sjis', 's_jis']: encoding = 'cp932'
return encoding
Supervisé, merci.
Recommended Posts