Задать вопрос
hottabxp
@hottabxp
Сначала мы жили бедно, а потом нас обокрали..

Как в Windows создать файл с кириллицей в названии файла?

Есть файл f.txt (utf-8) со следующим содержанием:
один
два
три

и скрипт на Python:
with open('f.txt') as file:
	lines = file.read().splitlines()

for line in lines:
	print(line)
	with open(line,'w') as file:
		file.write('')

В Linux всё разумеется работает без проблем, а в Windows вместо кириллицы такие символы:
613fb03fca662764228353.png
Как можно решить проблему?
  • Вопрос задан
  • 405 просмотров
Подписаться 2 Простой 4 комментария
Решения вопроса 4
sergey-kuznetsov
@sergey-kuznetsov
Автоматизатор
Может быть так сработает?
with open('f.txt') as file:
    lines = file.read().splitlines()

for line in lines:
    print(line)
    with open(line.encode('utf-8'), 'w') as file:
        file.write('')


Тут мы явно указываем, что имя файла в кодировке UTF-8, а не в однобайтной кодировке OEM.
Ответ написан
Комментировать
fox_12
@fox_12 Куратор тега Python
Расставляю биты, управляю заряженными частицами
Перекодируем из utf-8 в windows-1251:
with open('f.txt') as file:
    lines = file.read().splitlines()

for line in lines:
    with open(line.encode('utf8').decode().encode('cp1251'), 'w') as file:
        file.write('')

и получаем желаемое:
61402f464cb95632624286.jpeg
Ответ написан
Комментировать
Vindicar
@Vindicar
RTFM!
The default encoding is platform dependent (whatever locale.getpreferredencoding() returns), but any text encoding supported by Python can be used.

Так что Ultra-Bad Coder прав. По дефолту на винде у тебя f.txt открывается с кодировкой windows-1251, а в линуксе по дефолту юникод поди.
Лучше всегда при открытии явно указывать режим и ожидаемую кодировку файла.
Ответ написан
Комментировать
DamianLewis
@DamianLewis
Попробуйте использовать кодировку ANSI1251
61402c42469c6262236910.png
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы