Форум сайта python.su
Antonpythonshutil.copy(src, dst) копирует только АДЫН файл,.
shutil.copy(src, dst)
Antonpythonнаписать полностью что? вот простой пример , оно копирует только файлы с расширением pdf из папки ‘G:\1\3’ в папку ‘G:\1\145’ при этом папка ‘G:\1\145’ должна уже существавать, вложеные папки и файлы в них игнорируються.
Кто-нибудь может написать полностью?
import os, shutil path = 'G:\\1\\3' moveto = 'G:\\1\\145' for file_name in [f for f in os.listdir(path) if os.path.isfile(os.path.join(path, f))]: fname, ext = os.path.splitext(file_name) if ext.lower() == '.pdf': shutil.copy(os.path.join(path, file_name), moveto)
[code python][/code]
Отредактировано PEHDOM (Янв. 10, 2019 13:34:21)
Офлайн
Каталоги /tmp/dir1 и /tmp/dir2.
/tmp/dir1: /tmp/dir1/OBC.T0 /tmp/dir1/OBC.T1 /tmp/dir1/OBC.TD/file1
/tmp/dir2: пусто
from glob import glob from shutil import move, copy2, copytree from os.path import join, isfile, basename dir1 = '/tmp/dir1' dir2 = '/tmp/dir2' COPY = True MOVE = not COPY files = glob(join(dir1, 'OBC.T*')) for f in files: dst = join(dir2, basename(f)) if COPY: if isfile(f): copy2(f, dst) # или #copy2(f, dir2) else: # isdir copytree(f, dst) if MOVE: move(f, dst)
Отредактировано uf4JaiD5 (Янв. 13, 2019 22:55:11)
Офлайн
А как добавить в условие копирования дату и время?
Например, скопировать файлы с датой создания с - по
from glob import glob from shutil import move, copy2, copytree from os.path import join, isfile, basename dir1 = 'H:\\1' dir2 = 'H:\\2' COPY = True files = glob(join(dir1, 'OBC.TskMdt*')) for f in files: dst = join(dir2, basename(f)) if COPY: if isfile(f): copy2(f, dir2)
Офлайн
# from glob import glob from shutil import move, copy2, copytree from os.path import join, isfile, basename, getctime from datetime import date dir1 = '/tmp/dir1' dir2 = '/tmp/dir2' COPY = True MOVE = not COPY files = glob(join(dir1, 'OBC.T*')) for f in files: dst = join(dir2, basename(f)) d = date.fromtimestamp(getctime(f)) if d < date(2010,1,1) or date(2019,1,13) < d: print(f'Пропускаю {f}. Дата не подходит: {d}') continue if COPY: if isfile(f): copy2(f, dst) # или #copy2(f, dir2) else: #isdir copytree(f, dst) if MOVE: move(f, dst)
Отредактировано uf4JaiD5 (Янв. 17, 2019 20:45:11)
Офлайн
Подскажите, пожалуйста, если нужно скопировать файлы по нескольким маскам, например CRA, CRL, как это указать в коде.
Офлайн
Igor.Igor
если нужно скопировать файлы по нескольким маскам, например CRA, CRL, как это указать в коде
>>> import os >>> import glob >>> >>> def get_files(dir_path, file_mask_list): ... out = [] ... for mask in file_mask_list: ... out.extend(glob.glob(os.path.join(dir_path, mask))) ... return out ... >>> get_files('/etc', ['*.conf~', '*.deny']) ['/etc/vconsole.conf~', '/etc/locale.conf~', '/etc/hosts.deny', '/etc/at.deny', '/etc/cron.deny'] >>>
Офлайн
Спасибо за функцию, простите за уж совсем глупые вопросы, но я ранее не работал с python, да и програмированием особо не занимался. А сейчас появилась необходимость в небольшой оптимизации.
Получается код ниже копирует файлы, но только по одной маске, а у меня их получается 6, как мне правильно добавить фашу функцию?
Не ругайте за глупые вопросы)
import glob import shutil from os.path import join, isfile, basename dir1 = 'C:/test1' dir2 = 'C:/test2' COPY = True files = glob.glob(join(dir1, 'DSA*')) #и еще 5 таких масок for f in files: dst = join(dir2, basename(f)) if COPY: if isfile(f): shutil.copy2(f, dir2)
Офлайн
Igor.IgorЯ просто добавил функцию, ничего не исправлял.
как мне правильно добавить фашу функцию?
import os import glob import shutil from os.path import join, isfile, basename def get_files(dir_path, file_mask_list): out = [] for mask in file_mask_list: out.extend(glob.glob(os.path.join(dir_path, mask))) return out dir1 = 'C:/test1' dir2 = 'C:/test2' COPY = True files = get_files(dir1, ['DSA*', 'DSB*']) #и еще 5 таких масок for f in files: dst = join(dir2, basename(f)) if COPY: if isfile(f): shutil.copy2(f, dir2)
Отредактировано py.user.next (Март 30, 2023 03:38:19)
Офлайн
Большое спасибо за помощь, все работает.
А dir убрал, все работает.
Офлайн