Форум сайта python.su
7
PatrikНе совсем понятно, что Вы имеете в виду под “шаблоном”
1 Если файл копируется в папку, то все в порядке. Но если его придется копировать под другим именем,
как сделать шаблон?
Patrik
выдает много дубликатов, и не понятно как сопоставить с dstpath.
PatrikСоздавая каталоги вручную, Вы усложняете логику программы. При копировании больших файлов, лишний вызов os.makedirs() значения иметь не будет. Посему, предлагаю поступить так:
3 Как сделать связку с :
file_list = [] for root, dirs, files in os.walk(SRC_PATH): for name in files: path = root[len(SRC_PATH):] file_list.append(os.path.join(path, name))
file_dir = os.path.dirname(list_item) if not os.path.exists(file_dir): os.makedirs(file_dir)
file_list = [] # Определяем каталог это или файл if os.path.isfile(SRC_PATH): file_list.append(os.path.basename(SRC_PATH)) # Из пути SRC_PATH берем только имя файла else: for a, b, c in os.walk(SRC_PATH): file_list.append(...) # Цикл копирования for item in file_list: source = os.path.join(os.path.dirname(SRC_PATH), item) # Вот здесь может глючить, если в SRC_PATH передавать путь к каталогу и не завершать его символом '/' target = os.path.join(os.path.dirname(DST_PATH), item) # Создаем каталоги file_dir = os.path.dirname(target) if not os.path.exists(file_dir): os.makedirs(file_dir) # Дальше идет сам код копирования ...
Отредактировано john123 (Июль 6, 2014 11:10:43)
Офлайн
0
john123: Под шаблоном я имел ввиду, выделение в пути имени файла.
Если файл копировать в папку, то тут все понятно. Но если, копировать в папку под другим именем, тут нужно как-то выделить из пути имя файла, чтобы создать
file_list = [] SRC_PATH="C:\test.txt" DST_PATH="C:\test\proba.txt" # Определяем каталог это или файл if os.path.isfile(SRC_PATH): file_list.append(os.path.basename(SRC_PATH)) # заносим имя файла в массив # Цикл копирования for item in file_list: source = os.path.join(os.path.dirname(SRC_PATH), item) # сформировали путь откуда копируем. target = os.path.join(os.path.dirname(DST_PATH), item) # тут получим C:\test\test.txt" хотя должны были получить C:\test\proba.txt
Офлайн
0
Копирую файлы с сети (smb) на флешку:
def CopyFile(srcpath, dstpath): """ Функция копирования файла """ CHUCK_SIZE = 16384 source_size = os.stat(srcpath).st_size print("Копируем ФАЙЛ...") try: source = open(srcpath, 'rb') target = open(dstpath, 'wb') try: while target.tell() < source_size - 1: target.write(source.read(CHUCK_SIZE)) target.flush() ProgressBar(dstpath, target.tell(), source_size) # вывод прогресс бара finally: source.close() target.close() except IOError: print("Не могу открыть входящий или исходящий файл")
Отредактировано Patrik (Июль 22, 2014 21:53:48)
Офлайн