Запись файла с кодировкой

Последняя строчка кодируется нормально, а первые две - белиберда

import codecs

name = input("Введіть імя: ")
file2 = codecs.open("file2.txt","w","utf-8")
file2.write("Ваше імя-"+ name)
kyrs = input("Введіть курс: ")
file2 = codecs.open("file2.txt","a","utf-8")
file2.write("\nНазва курсу -"+ kyrs)
vcego = str(len(kyrs) + len(name))
file2 = open("file2.txt","a")
file2.write("\nКількість символів-"+ vcego)
file2 = open("file2.txt","r")
p = file2.read()
print(p)
file2.close()
file2.close()
file2.close()
file2.close()

Ответы (2 шт):

Автор решения: Redume

Вы открывали через стандартный open а не codecs тем самым там не было указана кодеровка и в файле получалась "белеберда"

import codecs

name = input("Введіть імя: ")

file2 = codecs.open("file2.txt", "w", "utf-8")

file2.write("Ваше імя-" + name)

kyrs = input("Введіть курс: ")

file2 = codecs.open("file2.txt", "a", "utf-8")

file2.write("\nНазва курсу -" + kyrs)

vcego = str(len(kyrs) + len(name))

file2 = codecs.open("file2.txt", "a", "utf-8")  # Изменено

file2.write("\nКількість символів-" + vcego)

file2 = open("file2.txt", "r")

p = file2.read()

print(p)

file2.close()

file2.close()

file2.close()

file2.close()
→ Ссылка
Автор решения: splash58

Не очень понятно, зачем вам codecs, python прекрасно работает с utf-8. Плюс вы много раз открываете file2, а закрываете только в конце. Программа, естественно, не различает ваши file2, так что код становится не очень осмысленным

Проще сделать как-то так:

name = input("Введіть імя: ")
kyrs = input("Введіть курс: ")
vcego = str(len(kyrs) + len(name))

with open("file2.txt", "w", encoding='utf-8') as file2:
    file2.write("Ваше імя-"+ name)
    file2.write("\nНазва курсу -"+ kyrs)
    file2.write("\nКількість символів-"+ vcego)

with open("file2.txt", "r", encoding='utf-8') as file2:
    p = file2.read()
    print(p)

если убрать encoding в обоих случаях, все тоже будет работать, но файл будет записываться в windows с кодировкой по умолчанию, например, windows-1251 для русской локали

→ Ссылка