Простите, что обращаюсь с такой просьбой, но я ещё не отыскал более-менее живые русскоязычные ресурсы по питону. Я только взялся за его изучение и тут как раз мне на глаза попалась статья virtustilus —
Приводим русские тексты на Mac OS X в одну кодировку Python-скриптом. Мне показался код слишком накрученным и я попытался переписать его на свой лад. И хотелось бы услышать об ошибках, мною совершённых. Код простенький и небольшой:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import os
import sys
import chardet
def converter(path, file):
if file.endswith(".txt"):
P = os.path.join(path, file)
with open(P, "r") as F:
text = F.read()
enc = chardet.detect(text).get("encoding")
if enc and enc.lower() != u"utf-8":
try:
text = text.decode(enc)
text = text.encode("utf-8")
with open(P, "w") as f:
f.write(text)
print P+u" сконвертирован."
except:
print "Ошибка в имени файла: название содержит русские символы или пробелы."
print u"-------------------------------"
path = raw_input(u"Input path or file:")
if os.path.isdir(path) == True:
for (path, dirs, files) in os.walk(path):
for file in files:
converter(path, file)
elif os.path.isfile(path) == True:
converter(os.path.dirname(path), os.path.basename(path))
sys.exit(0)
Попутно у меня есть несколько вопросов:
1. Что делать если файл содержит русские буквы или пробелы? Пока они просто подпадают под исключение и ничего с ними не делается, но может быть есть способы? Гуглинг не сильно помог в ответе на этот вопрос&
2. Как правильно в raw_input вставить русские символы в строку «приветствия»? Пока он ругается
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3: ordinal not in range(128)
3. Как при помощи .endswith() указать несколько расширений файлов?
Заранее благодарен за помощь. Если вопросы совсем уж детские — вы меня простите, ещё не очень освоился с питоновской документацией, я с ним от силы всего пару недель знаком. :-[