Задача, скопировать несколько файлов в некий каталог.
Подводные камни:
* имя исходного файла относительно текущего каталога
* имя исходного файла содержит кириллицу
* имя исходного файла содержит пробелы
структура ФС:
-doc
-folder_1/file раз.txt
-folder_1/file два.txt
-folder два/file раз.txt
-folder два/file 2.txt
нужно все файлы скопировать в каталог doc
Код для теста наваял такой:
#!/usr/bin/python
# -*- coding: utf-8 -*-
# тест
import sys
import shutil
import os
docs = ["\"folder_1/file раз.txt\"",
"\"folder_1/file два.txt\"",
"\"folder два/file два.txt\"",
"\"folder два/file 2.txt\""]
destDir = "doc"
def copyDocs():
if os.path.isdir(destDir):
print '\'' + destDir + '\'' + ' is Dir'
for doc in docs:
if os.path.exists(doc):
print doc + ' is exists!'
else:
print doc + ' is NOT exists!'
#file = os.path.basename(doc)
#shutil.copy(doc, destDir)
if __name__ == '__main__':
copyDocs()
'doc' is Dir
"folder_1/file ╤А╨░╨╖" is NOT exists!
"folder_1/file ╨┤╨▓╨░" is NOT exists!
"folder ╨┤╨▓╨░/file ╨┤╨▓╨░╨н" is NOT exists!
"folder ╨┤╨▓╨░/file 2" is NOT exists!
'doc' is Dir
"folder_1/file раз.txt" is NOT exists!
"folder_1/file РґРІР°.txt" is NOT exists!
"folder РґРІР°/file РґРІР°Р.txt" is NOT exists!
"folder РґРІР°/file 2.txt" is NOT exists!
'doc' is Dir
"folder_1/file раз.txt" is NOT exists!
"folder_1/file два.txt" is NOT exists!
"folder два/file два.txt" is NOT exists!
"folder два/file 2.txt" is NOT exists!
Так ты же кавычки в имя файла запихал
# -*- coding: utf-8 -*-
import os
docs = ['folder_1/file раз.txt',
'folder_1/file два.txt',
'folder два/file раз.txt',
'folder два/file 2.txt'
]
for doc in docs:
if os.path.exists(doc):
print doc, 'is exist!'
else:
print doc, 'is NOT exist!'
вот к чему привёл метод научного тыка:
* экранированные кавычки - ненужны.
* если кодировка исходника CP1251, то всё корректно работает с кириллицей, не взирая на то, что в начале файла есть запись о кодировке UTF-8.
Но надо бы делать по правильному - заявленная кодировка должна соответствовать реальной.
в случае с Qt, можно было бы воспользоваться QObject::trUtf8(). Однако питону явно указано в какой кодировке файл.
Тут я что-то совсем не пойму.
П.С.
Питон 2.6
#include <QtCore>
int main(int argc, char **argv)
{
QCoreApplication app(argc, argv);
QFile file("\"file name.txt\"");
if (file.exists())
qDebug("file (%s) is exist!", qPrintable(file.fileName()));
else
qDebug("file (%s) is NOT exist!", qPrintable(file.fileName()));
return 0;
}
Такой код тоже файла не найдет, даже если он существует. Все по тем же причинам (кавычки в имени файла).# -*- coding: cp1251 -*-
# -*- coding: cp1251 -*-
import os
file_name = 'file один.txt'
if os.path.exists(file_name):
print file_name, 'is exist!'
else:
print file_name, 'is NOT exist!'
Этот код не найдет существующий файл. К тому же на консоль выведет кракозябры. Что бы всё работало так как задумано , нужно писать такfile_name = 'file один.txt'.decode('cp1251')
print 'Здесь должен быть текст на Русском в кодировке ibm866'.decode('ibm866')
print 'Здесь должен быть текст на Русском в кодировке ibm866'.decode('ibm866')
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)