Найти - Пользователи
Полная версия: Скопировать файлы из одной папки в другую
Начало » Python для новичков » Скопировать файлы из одной папки в другую
1 2
PEHDOM
Antonpython
shutil.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)
uf4JaiD5
Каталоги /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)
Копирует или перемещает из dir1 в dir2 файлы и каталоги, подходящие по маске (в данном случае – начинающиеся на “OBC.T”, см glob).
Копирует, если COPY = True. Перемещает, если COPY = False.
Antonpython
А как добавить в условие копирования дату и время?
Например, скопировать файлы с датой создания с - по

 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)
uf4JaiD5
 #
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)
Igor.Igor
Подскажите, пожалуйста, если нужно скопировать файлы по нескольким маскам, например CRA, CRL, как это указать в коде.
py.user.next
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']
>>>
Igor.Igor
Спасибо за функцию, простите за уж совсем глупые вопросы, но я ранее не работал с 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)
py.user.next
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)
Тут просто вопрос: а что такое dst, зачем оно нужно, если не используется?

Igor.Igor
Большое спасибо за помощь, все работает.
А dir убрал, все работает.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB