Копирование файлов в Питоне |
Здравствуйте, гость ( Вход | Регистрация )
Копирование файлов в Питоне |
Litkevich Yuriy |
16.5.2011, 10:30
Сообщение
#1
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Задача, скопировать несколько файлов в некий каталог.
Подводные камни: * имя исходного файла относительно текущего каталога * имя исходного файла содержит кириллицу * имя исходного файла содержит пробелы структура ФС: -doc -folder_1/file раз.txt -folder_1/file два.txt -folder два/file раз.txt -folder два/file 2.txt нужно все файлы скопировать в каталог doc Код для теста наваял такой:
К консоли винды получаю такое:
В IDLE:
А вот если не изменяя самого исходника, поменять кодировку файла на ANSI (т.е. и запись о кодировке UTF-8 оставить неизменной) то вывод в IDLE будет:
Т.е. выводится корректный текст, но файлы всё-равно не видит. |
|
|
igor_bogomolov |
16.5.2011, 19:48
Сообщение
#2
|
Профессионал Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29 |
Так ты же кавычки в имя файла запихал
|
|
|
Litkevich Yuriy |
16.5.2011, 19:52
Сообщение
#3
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
Litkevich Yuriy |
17.5.2011, 5:41
Сообщение
#4
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
вот к чему привёл метод научного тыка:
* экранированные кавычки - ненужны. * если кодировка исходника CP1251, то всё корректно работает с кириллицей, не взирая на то, что в начале файла есть запись о кодировке UTF-8. Но надо бы делать по правильному - заявленная кодировка должна соответствовать реальной. в случае с Qt, можно было бы воспользоваться QObject::trUtf8(). Однако питону явно указано в какой кодировке файл. Тут я что-то совсем не пойму. П.С. Питон 2.6 |
|
|
igor_bogomolov |
17.5.2011, 12:10
Сообщение
#5
|
Профессионал Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29 |
* экранированные кавычки - ненужны. Ну это мы уже выяснили. Так ты же кавычки в имя файла запихал Было бы странно, если бы они были нужны. Мы же не в консоли команду вводим. Ты же не делаешь в Qt так: Такой код тоже файла не найдет, даже если он существует. Все по тем же причинам (кавычки в имени файла).* если кодировка исходника CP1251, то всё корректно работает с кириллицей, не взирая на то, что в начале файла есть запись о кодировке UTF-8. Так если у тебя файл в кодировке cp1251, почему интерпретатору ты говоришь иначе? Пиши такНо надо бы делать по правильному - заявленная кодировка должна соответствовать реальной.
Ну и что бы завершить тему. Представим ситуацию. Файл у нас в кодировке cp1251. Система/консоль в UTF8. Этот код не найдет существующий файл. К тому же на консоль выведет кракозябры. Что бы всё работало так как задумано , нужно писать так
Но это надуманный пример. В реальной ситуации такого быть не должно. |
|
|
Litkevich Yuriy |
19.5.2011, 7:07
Сообщение
#6
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
igor_bogomolov |
19.5.2011, 14:27
Сообщение
#7
|
Профессионал Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29 |
пример не понял. В какой кодировке исходник? В cp1251. В сообщении дважды это указано, на словах и в кодеЦитата('Litkevich Yuriy' date='19.5.2011 @ 8:07' post=49834) потому-что он изначально был в UTF-8 Что то ты запутался в кодировках и меня запутал. В общем так. Если ты используешь кириллицу в файле *.py, ты должен явно указывать кодировку этого файла. Делается это так: # -*- coding: cp1251 -*-. Далее, если у тебя кодировка консоли (это пример) отличается от кодировки исходников, при выводе сообщения с кириллицей на экран ты увидишь просто набор не читаемых символов. Если ты хочешь увидеть реальное сообщение делай так
Поэкспериментируй немного с функцией decode и кодировками файла и все встанет на свои места. |
|
|
Litkevich Yuriy |
19.5.2011, 16:43
Сообщение
#8
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Что то ты запутался в кодировках и меня запутал. я изначально написал исходник в кодировке utf-8 и соответсвующим образом пометил во второй строке файла.Если ты хочешь увидеть реальное сообщение делай так а если я не хочу вывода в консоль, а просто копирую файлы? всё равно нужно использовать decode()?
Поэкспериментируй немного с функцией decode и кодировками файла и все встанет на свои места. |
|
|
igor_bogomolov |
19.5.2011, 23:17
Сообщение
#9
|
Профессионал Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29 |
|
|
|
Текстовая версия | Сейчас: 22.12.2024, 9:12 |