Прочтите много файлов csv и запишите их в кодировку utf8 с помощью python

Я использую код python для чтения из многих файлов csv и устанавливаю кодировку в utf8.I встречается проблема, когда я читаю файл, я могу читать все строки, но когда я его пишу, он может писать только одну строку. Пожалуйста, помогите мне проверить мой код, как показано ниже:

def convert_files(files, ascii, to="utf-8"): for name in files: #print ("Convert {0} from {1} to {2}").format(name, ascii, to) with open(name) as f: print(name) count = 0 lineno = 0 #this point I want to write the below text into my each new file at the first line #file_source.write('id;nom;prenom;nom_pere;nom_mere;prenom_pere;prenom_mere;civilite (1=homme 2=f);date_naissance;arrondissement;adresse;ville;code_postal;pays;telephone;email;civilite_demandeur (1=homme 2=f);nom_demandeur;prenom_demandeur;qualite_demandeur;type_acte;nombre_actes\n') for line in f.readlines(): lineno +=1 if lineno == 1 : continue file_source = open(name, mode='w', encoding='utf-8', errors='ignore') #pass #print (line) # start write data to to new file with encode file_source.write(line) #file_source.close #print unicode(line, "cp866").encode("utf-8") csv_files = find_csv_filenames('./csv', ".csv") convert_files(csv_files, "cp866") 

3 Solutions collect form web for “Прочтите много файлов csv и запишите их в кодировку utf8 с помощью python”

Вы открываете файл во время каждой итерации.

 for line in f.readlines(): lineno +=1 if lineno == 1 : continue #move the following line outside of the for block file_source = open(name, mode='w', encoding='utf-8', errors='ignore') 

Если все, что вам нужно, это изменить кодировку символов в файлах, то неважно, что они являются файлами csv, если преобразование не может изменить то, что символы интерпретируются как разделитель, катчар и т. Д.

 def convert(filename, from_encoding, to_encoding): with open(filename, newline='', encoding=from_encoding) as file: data = file.read().encode(to_encoding) with open(filename, 'wb') as outfile: outfile.write(data) for path in csv_files: convert(path, "cp866", "utf-8") 

Добавить параметр errors чтобы изменить способ обработки ошибок кодирования / декодирования.

Если файлы могут быть большими, вы можете конвертировать данные постепенно:

 import os from shutil import copyfileobj from tempfile import NamedTemporaryFile def convert(filename, from_encoding, to_encoding): with open(filename, newline='', encoding=from_encoding) as file: with NamedTemporaryFile('w', encoding=to_encoding, newline='', dir=os.path.dirname(filename)) as tmpfile: copyfileobj(file, tmpfile) tmpfile.delete = False os.replace(tmpfile.name, filename) # rename tmpfile -> filename for path in csv_files: convert(path, "cp866", "utf-8") 

Вы можете сделать это

 def convert_files(files, ascii, to="utf-8"): for name in files: with open(name, 'r+') as f: data = ''.join(f.readlines()) data.decode(ascii).encode(to) f.seek(0) f.write(data) f.truncate() 
  • Python - Как отправить сообщение utf-8?
  • Python + PostgreSQL + странная ошибка ascii = UTF8
  • Использование символов utf-8 в шаблоне Jinja2
  • python - преобразование двоичных данных в utf-8
  • Работа с номерами UTF-8 в Python
  • Werkzeug повышает BrokenFilesystemWarning
  • Преобразование Unicode в python
  • Выход Unicode в stdout Python при запуске из cmd.exe
  •  
    Interesting Posts for Van-Lav

    «Add to set» возвращает логическое значение в java – как насчет python?

    Как получить строку и столбец конечной позиции текста в Tkinter?

    Добавление одной и той же строки в список строк в Python

    Получить результат из задачи «task_id» в сельдерей из неизвестной задачи

    Удаление дублированных строк, но сохранить их с определенным значением в одном столбце (pandas python)

    Как удалить текст в круглых скобках с помощью регулярного выражения?

    Уникальное ограничение OpenERP

    Кто-нибудь нашел хороший набор плагинов для python для vim – в частности, для завершения модуля?

    Как написать скребковый контент в файл CSV?

    Преобразование строкового представления словаря в настоящий словарь

    Интерполирование рассеянных данных из тома с пустым пространством

    Является ли RoboCode как игра или вызов для Python?

    Алгоритм сравнения изображений

    Как я могу нарисовать значения NaN как особый цвет с imshow в matplotlib?

    Разработка API Python для существующего Java API

    Python - лучший язык программирования в мире.