Скрипты — Code juggler - велосипед для изменения кодировки текстовых файлов.
Зачем ты это сделал?!
Недавно мне понадобилось перегнать в utf-8 больше трёх сотен файлов. Проблема усугублялась тем, что файлы были созданы в очень разных кодировках. Разгребать это руками - весьма унылое занятие... Беглый гуглёж не порадовал. Решено было вместо обеденного перерыва размять косточки и вспомнить няшный python. За обеденный перерыв я написал кривенький скрипт, который освободил мне время длявесёлой фермы самообразования. После этого я решил оформить своего уродца в некое подобие серьёзной программы. Но...
Прошло 7 месяцев.
За 7 месяцев я мог успеть написать операционную систему. Я мог бегло выучить иностранный язык. Я мог проявить себя и поиметь головокружительный карьерный рост. Уж во всяком случае я мог довести до совершенства простенький скрипт из 40 строк. Но я успел только напрочь забыть логику своего творения. Буквально 3 дня назад я вспомнил о нём и решил, что новогодние каникулы - отличное время для доведения подобных дел до конца. Оказалось, что проще переписать код заново, чем разгребать те адовы заросли. Я хотел реализовать сразу слишком много. На этом, пожалуй, остановлю затянувшееся предисловие и перейду к делу.
Описание
Название "Code juggler" прошу понимать как "Жонглёр кодировками". Да, да. Code - не правильно. Правильно - Encode. Но писать названия проектов без ошибок - моветон. Скрипт умеет работать с каталогом и менять кодировку файлов в нём. Кроме того, может просто показать кодировку файлов из каталога. Вот, собственно и всё. Теперь опишу параметры, которые можно передавать скрипту:
"-p", "--path"
Задайте директорию, в которой будет работать скрипт. По умолчанию будет принята директория, из которой запущен скрипт.
"-s", "--show-only"
Если передана эта опция, скрипт просто покажет кодировку каждого файла. Больше ничего не произойдёт.
"-d", "--decode"
Собственно, кодировка, в которую хотим перекодировать. Если кодировка не задана, будет использоваться "utf8". Названия кодировок искать в средней колонке второй с низу таблички на этой странице.
"--remove"
Если задать эту опцию, исходный файл после изменения кодировки будет удалён.
"-e", "--extension"
Можно задать расширение для файлов с которыми нужно работать.
"--prefix"
Префикс, который нужно добавить к вновь созданному файлу. По умолчанию "re_". Наприер, если изначально файл назывался foo.txt, то после обработки название изменится на re_foo.txt.
"-i", "--ignore-subpath"
Если передан этот параметр, скрипт не полезет во вложенные каталоги.
"-a", "--accuracy"
Через этот параметр задаётся точность определения кодировки. Фактически - это число байт, которое будет прочитано из определяемого файла. По умолчанию читает 10000 байт. Дело в том что если сделать это число слишком большим, скрипт будет работать крайне медленно. Если сделать число слишком маленьким, скрипт не сможет точно определить кодировку (скорее всего выплюнет 'ascii'). 10000 - это экспериментально определённая "золотая середина". У меня на тестовых файлах (сохранённые html странички в разных кодировках) при величине 10000 не было ни одной ошибки.
Итак, коротенький список фич:
Автоматическое определение кодировки исходного файла.
Возможность работать только с файлами с определённым расширением (вернее, окончанием).
Возможность удалить исходные файлы автоматически.
Планы на будущее:
Причесать код.
Прикрутить возможность задавать несколько расширений.
Прикрутить возможность задавать игнорируемые расширения.
Прикрутить возможность задавать глубину обхода вложенных каталогов.
Планы на далёкое будущее:
Прикрутить возможность задавать имена файлов по регулярным выражениям.
Прикрутить возможность задавать несколько каталогов.
Написать ОС на основе моего скрипта.
Дисклеймер:
Это альфа версия. В идеале глюков быть не должно, но они возможны. Кроме того, подсказка по опциям (scriptname -h) не работает. Над этим уже размышляют лучшие умы человечества.
Скрипт использует сторонний модуль, который у вас может быть не установлен.
Установка описана под спойлером:
Собственно, сам скрипт:
Скрипт нужно копипастнуть в файл, дать права на запуск (chmod filename +x, где filename - имя файла со скриптом) и можно пользоваться. Скрипт прекрасно себя чувствует в оффтопике, только нужно будет установить питон. Берегите отступы в файле. В питоне они важны.
Недавно мне понадобилось перегнать в utf-8 больше трёх сотен файлов. Проблема усугублялась тем, что файлы были созданы в очень разных кодировках. Разгребать это руками - весьма унылое занятие... Беглый гуглёж не порадовал. Решено было вместо обеденного перерыва размять косточки и вспомнить няшный python. За обеденный перерыв я написал кривенький скрипт, который освободил мне время для
Прошло 7 месяцев.
За 7 месяцев я мог успеть написать операционную систему. Я мог бегло выучить иностранный язык. Я мог проявить себя и поиметь головокружительный карьерный рост. Уж во всяком случае я мог довести до совершенства простенький скрипт из 40 строк. Но я успел только напрочь забыть логику своего творения. Буквально 3 дня назад я вспомнил о нём и решил, что новогодние каникулы - отличное время для доведения подобных дел до конца. Оказалось, что проще переписать код заново, чем разгребать те адовы заросли. Я хотел реализовать сразу слишком много. На этом, пожалуй, остановлю затянувшееся предисловие и перейду к делу.
Описание
Название "Code juggler" прошу понимать как "Жонглёр кодировками". Да, да. Code - не правильно. Правильно - Encode. Но писать названия проектов без ошибок - моветон. Скрипт умеет работать с каталогом и менять кодировку файлов в нём. Кроме того, может просто показать кодировку файлов из каталога. Вот, собственно и всё. Теперь опишу параметры, которые можно передавать скрипту:
"-p", "--path"
Задайте директорию, в которой будет работать скрипт. По умолчанию будет принята директория, из которой запущен скрипт.
"-s", "--show-only"
Если передана эта опция, скрипт просто покажет кодировку каждого файла. Больше ничего не произойдёт.
"-d", "--decode"
Собственно, кодировка, в которую хотим перекодировать. Если кодировка не задана, будет использоваться "utf8". Названия кодировок искать в средней колонке второй с низу таблички на этой странице.
"--remove"
Если задать эту опцию, исходный файл после изменения кодировки будет удалён.
"-e", "--extension"
Можно задать расширение для файлов с которыми нужно работать.
"--prefix"
Префикс, который нужно добавить к вновь созданному файлу. По умолчанию "re_". Наприер, если изначально файл назывался foo.txt, то после обработки название изменится на re_foo.txt.
"-i", "--ignore-subpath"
Если передан этот параметр, скрипт не полезет во вложенные каталоги.
"-a", "--accuracy"
Через этот параметр задаётся точность определения кодировки. Фактически - это число байт, которое будет прочитано из определяемого файла. По умолчанию читает 10000 байт. Дело в том что если сделать это число слишком большим, скрипт будет работать крайне медленно. Если сделать число слишком маленьким, скрипт не сможет точно определить кодировку (скорее всего выплюнет 'ascii'). 10000 - это экспериментально определённая "золотая середина". У меня на тестовых файлах (сохранённые html странички в разных кодировках) при величине 10000 не было ни одной ошибки.
Итак, коротенький список фич:
Автоматическое определение кодировки исходного файла.
Возможность работать только с файлами с определённым расширением (вернее, окончанием).
Возможность удалить исходные файлы автоматически.
Планы на будущее:
Причесать код.
Прикрутить возможность задавать несколько расширений.
Прикрутить возможность задавать игнорируемые расширения.
Прикрутить возможность задавать глубину обхода вложенных каталогов.
Планы на далёкое будущее:
Прикрутить возможность задавать имена файлов по регулярным выражениям.
Прикрутить возможность задавать несколько каталогов.
Написать ОС на основе моего скрипта.
Дисклеймер:
Это альфа версия. В идеале глюков быть не должно, но они возможны. Кроме того, подсказка по опциям (scriptname -h) не работает. Над этим уже размышляют лучшие умы человечества.
Скрипт использует сторонний модуль, который у вас может быть не установлен.
Установка описана под спойлером:
Перейдите по ссылке и скачайте архив для Python 2.
Теперь распакуйте архив и перейдите в появившияся каталог:
Теперь запустите скрипт setup.py с помошью python в качестве интерпретатора:
Теперь модуль установлен. Можно пользоваться скриптом.
Теперь распакуйте архив и перейдите в появившияся каталог:
1 2 |
tar -xzf python2-chardet-2.0.1.tgz |
Теперь запустите скрипт setup.py с помошью python в качестве интерпретатора:
1 2 3 |
|
Теперь модуль установлен. Можно пользоваться скриптом.
Собственно, сам скрипт:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
#!/usr/bin/python |
Скрипт нужно копипастнуть в файл, дать права на запуск (chmod filename +x, где filename - имя файла со скриптом) и можно пользоваться. Скрипт прекрасно себя чувствует в оффтопике, только нужно будет установить питон. Берегите отступы в файле. В питоне они важны.