Преобразование нескольких файлов CSV в кодировку UTF-8 - PullRequest
0 голосов
/ 21 июня 2020

Мне нужно преобразовать несколько файлов CSV (с разными кодировками) в UTF-8.

Вот мой код:

#find encoding and if not in UTF-8 convert it

import os
import sys
import glob
import chardet
import codecs

myFiles = glob.glob('/mypath/*.csv')

csv_encoding = []

for file in myFiles:
  with open(file, 'rb') as opened_file:
     bytes_file=opened_file.read()
     result=chardet.detect(bytes_file)
     my_encoding=result['encoding']
     csv_encoding.append(my_encoding)
        
print(csv_encoding)

for file in myFiles:
  if csv_encoding in ['utf-8', 'ascii']:
    print(file + ' in utf-8 encoding')
  else:
    with codecs.open(file, 'r') as file_for_conversion:
      read_file_for_conversion = file_for_conversion.read()
    with codecs.open(file, 'w', 'utf-8') as converted_file:
       converted_file.write(read_file_for_conversion)
    print(file +' converted to utf-8')

Когда я пытаюсь запустить этот код, я получаю следующая ошибка: UnicodeDecodeError: код 'utf-8' c не может декодировать байт 0xf3 в позиции 5057: недопустимый байт продолжения

Кто-нибудь может мне помочь? Спасибо !!!

1 Ответ

1 голос
/ 21 июня 2020

Вам нужно zip списки myFiles и csv_encoding, чтобы выровнять их значения:

for file, encoding in zip(myFiles, csv_encoding):
    ...

И вам нужно указать это значение в open() call:

    ...
    with codecs.open(file, 'r', encoding=encoding) as file_for_conversion:

Примечание: в Python 3 нет необходимости использовать модуль codecs для открытия файлов. Просто используйте встроенную функцию open и укажите кодировку с помощью параметра encoding.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...