Как скопировать файл в Python?
Я ничего не нашел в os
.
shutil
имеет множество методов, которые вы можете использовать. Один из них:
from shutil import copyfilecopyfile (src, dst)
- Скопировать содержимое файл с именем src в файл с именем dst .
- Место назначения должно быть доступно для записи; в противном случае возникнет исключение IOError .
- Если dst уже существует, оно будет заменено.
- Специальные файлы, такие как символьные или блочные устройства и каналы, не могут быть скопированы с помощью этой функции.
- При copy , src и dst — имена путей, представленные в виде
Если вы используете os.path
используйте copy
, а не copyfile
. copyfile
принимает только строки.
Функция | Копирует метаданные |
Копирует разрешения |
Использует файловый объект | Назначением может быть каталог |
---|---|---|---|---|
shutil.copy | Нет | Да | Нет | Да |
shutil.copyfile | Нет | Нет | Нет | Нет |
shutil.copy2 | Да | Да | Нет | Да |
shutil.copyfileobj | Нет | Нет | Да | Нет |
Функция | Копирует метаданные |
Копирует разрешения |
Использует файловый объект | Назначением может быть каталог |
---|---|---|---|---|
shutil.copy | Нет | Да | Нет | Да |
shutil.copyfile | Нет | Нет | Нет | Нет |
shutil.copy2 | Да | Да | Нет | Да |
shutil.copyfileobj | Нет | Нет | Да | Нет |
copy2 (src, dst)
часто более полезен, чем copyfile (src, dst)
потому что:
- он позволяет
dst
быть каталогом (вместо полного целевого имени файла), в этом случае для создания нового файла используется базовое имяsrc
; - он сохраняет исходный информация о модификации и доступе (mtime и atime) в метаданных файла (однако это связано с небольшими накладными расходами).
Вот краткий пример:
import shutilshutil.copy2 ('/src/dir/file.ext', '/dst/dir/newname.ext') # complete целевое имя файла givenshutil.copy2 ('/src/file. ext ','/dst/dir ') # целевое имя файла/dst/dir/file.ext
copy2 (src, dst)
часто бывает более полезным, чем copyfile (src, dst)
, потому что:
- он позволяет
dst
быть каталогом (вместо полного целевого имени файла), и в этом случае базовое имяsrc
используется для создания нового файла; - он сохраняет исходную информацию о модификации и доступе (mtime и atime) в метаданных файла (однако это связано с небольшими накладными расходами ).
Вот краткий пример:
import shutilshutil.copy2 ('/src/dir/file.ext' , '/dst/dir/newname.ext') # полное целевое имя файла givenshutil.copy2 ('/src/file.ext', '/dst/dir') # целевое имя файла/dst/dir/file.ext
Вы можете использовать одну из функций копирования из shutil
пак каге:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━Функция сохраняет, поддерживает, принимает копии других разрешений в директорию dest. метаданные файла obj ――――――――――――――――――――――――――――――――――――――――――――――― ――――――――――――――――――――――――――――――― shutil.copy ✔ ✔ ☐ ☐shutil.copy2 ✔ ✔ ☐ ✔shutil.copyfile ☐ ☐ ☐ ☐shutil.copyfileobj ☐ ☐ ✔ ☐━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Пример:
import shutilshutil.copy ('/etc/hostname', '/var/tmp/testhostname')
Вы можете использовать одну из функций копирования из пакета shutil
:
━━ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━━━━━━━━Функция сохраняет, поддерживает, принимает копии других разрешений в директорию dest. метаданные файла obj ――――――――――――――――――――――――――――――――――――――――――――――― ――――――――――――――――――――――――――――――― shutil.copy ✔ ✔ ☐ ☐shutil.copy2 ✔ ✔ ☐ ✔shutil.copyfile ☐ ☐ ☐ ☐shutil.copyfileobj ☐ ☐ ✔ ☐━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Пример:
import shutilshutil.copy ('/etc/hostname', '/var/tmp/testhostname')
В Python вы можете копировать файлы с помощью
-
shutil
модуль -
os
модуль -
subprocess
module
import osimport shutilimport subprocess
1) Копирование файлов с использованием модуля shutil
shutil.copyfile
подпись
shutil.copyfile (src_file, dest_file, *, follow_symlinks = True) # example shutil.copyfile ('source.txt', ' пункт назначения. txt ')
shutil.copy
подпись
shutil.copy (src_file, dest_file, *, follow_symlinks = True) # exampleshutil.copy ('source.txt', 'destination.txt')
shutil.copy2
подпись
shutil.copy2 (src_file, dest_file, *, follow_symlinks = True) # exampleshutil.copy2 ('source.txt', 'destination.txt')
shutil.copyfileobj
подпись
shutil.copyfileobj (src_file_object, dest_file_object [, length]) # examplefile_src = 'source.txt' f_src = open (file_src, 'rb') file_dest = 'destination.txt' f_dest = open (file_dest, 'wb') shutil.copyfileobj (f_src, f_dest)
2) Копирование файлов с использованием os
module
os.popen
подпись
os.popen (cmd [, mode [, bufsize]]) # пример # В Unix/Linuxos.popen ('cp source.txt destination.txt') # В Windowsos.popen ('copy source.txt destination.txt')
os.system
подпись
os.system (command) # В Linux/Unixos.system ('cp source.txt destination.txt') # В Windowsos.system (' copy source.txt destination.txt ')
3) Копирование файлов с помощью модуля subprocess
subprocess.call
подпись
subprocess.call (args, *, stdin = None, stdout = None, stderr = None, shell = False) # пример (ВНИМАНИЕ: установка `shell = True` может представлять угрозу безопасности) # В Linux/Unixstatus = subprocess.call ('cp source.txt destination.txt', shell = True) # В Windowsstatus = subprocess.call ('copy source.txt destination.txt', shell = True)
subprocess.check_output
подпись
subprocess.check_output (args, *, stdin = None, stderr = None, shell = False, universal_newlines = False) # пример (ВНИМАНИЕ: установка `shell = True` может быть угрозой безопасности) # В Linux/Unixstatus = subprocess.check_output ('cp source.txt destination.txt', shell = True) # В Windowsstatus = subprocess.check_output ('copy source.txt destination.txt' , shell = True)
В Python вы можете копировать файлы, использующие модуль
-
shutil
-
os
модуль -
subprocess
модуль
import osimport shutilimport subprocess
1) Копирование файлов с помощью модуль shutil
shutil.copyfile
подпись
шутил. copyfile (src_file, dest_file, *, follow_symlinks = True) # пример shutil.copyfile ('source.txt', 'destination.txt')
shutil.copy
подпись
shutil.copy (src_file, dest_file, *, follow_symlinks = True) # exampleshutil .copy ('source.txt', 'destination.txt')
shutil.copy2
подпись
shutil.copy2 (src_file, dest_file, *, follow_symlinks = True) # exampleshutil.copy2 ('source.txt', 'destination.txt')
shutil.copyfileobj подпись
shutil.copyfileobj (src_file_object, dest_file_object [, length]) # examplefile_src = 'source.txt' f_src = open (file_src, 'rb') file_dest = 'destination.txt' f_dest = open (file_dest, 'wb' ) shutil.copyfileobj (f_src, f_dest)
2) Копирование файлов с помощью модуля os
os.popen
подпись
os.popen (cmd [, mode [, bufsize]]) # пример # В Unix/Linuxos.popen ('cp source.txt destination.txt') # В Windowsos.popen ('copy source.txt destination.txt ')
os.system
подпись
os.system (command) # В Linux/Unixos.system ('cp source.txt destination.txt') # В Windowsos.system ('copy source.txt destination.txt')
3) Копирование файлов с помощью модуля subprocess
subprocess.call
подпись
subprocess.call (args, *, stdin = None, stdout = None, stderr = None, shell = False) # пример (ВНИМАНИЕ: установка shell = True может представлять угрозу безопасности) # В Linux/Unixstatus = subprocess.call ('cp source.txt destination.txt', shell = True) # В Windowsstatus = subprocess. call ('copy source.txt destination.txt', shell = True)
subprocess.check_output
подпись
subprocess.check_output ( args, *, stdin = None, stderr = None, shell = False, universal_newlines = False) # пример (ВНИМАНИЕ: установка shell = True может представлять угрозу безопасности) # В Linux/Unixstatus = subprocess.check_output ('cp source.txt destination.txt ', shell = True) # В Windowsstatus = subprocess.check_output (' copy source.txt destination.txt ', shell = True)
Копирование файла — относительно простая операция, как показано в примерах ниже, но вместо этого вы должны использовать для этого модуль shutil stdlib.
def copyfileobj_example (source, dest, buffer_size = 1024 * 1024): "" "Скопировать файл из источника в dest. source и dest должны быть файловыми объектами, т.е. любыми объектами с методом чтения или записи, например StringIO. "" "в то время как True: copy_buffer = source. read (buffer_size), если не copy_buffer: break dest.write (copy_buffer)
Если вы хотите копировать по имени файла, вы можете сделать что-то вроде этого:
def copyfile_example (source, dest): # Остерегайтесь, этот пример не обрабатывает крайние случаи! с open (source, 'rb') как src, open (dest, 'wb') as dst: copyfileobj_example (src, dst)
Копирование файла — относительно простая операция, как показано в примерах ниже, но вместо этого вы должны использовать для этого модуль shutil stdlib.
def copyfileobj_example (source, dest, buffer_size = 1024 * 1024): "" "Копировать файл из источника в dest. source и dest должны быть файловоподобными объектами, то есть любым объектом с методом чтения или записи, например например StringIO. "" "while True: copy_buffer = source.read (buffer_size), если не copy_buffer: break dest.write (copy_buffer)
Если вы хотите скопировать по имени файла, вы может сделать что-то вроде этого:
def copyfile_example (source, dest): # Осторожно, этот пример не обрабатывает крайние случаи! с open (source, 'rb') как src, open (dest, 'wb') as dst: copyfileobj_example (src, dst)
Используйте модуль shutil.
copyfile (src, dst)
Скопируйте содержимое файла с именем src в файл с именем dst. Место назначения должно быть доступно для записи; в противном случае возникнет исключение IOError. Если dst уже существует, он будет заменен. Специальные файлы, такие как символьные или блочные устройства и каналы, не могут быть скопированы с помощью этой функции. src и dst — имена путей, заданные в виде строк.
Взгляните на filesys для всех функций обработки файлов и каталогов, доступных в стандартных модулях Python.
Используйте модуль shutil.
copyfile (src, dst)
Скопируйте содержимое файла с именем src в файл с именем dst. Место назначения должно быть доступно для записи; в противном случае возникнет исключение IOError. Если dst уже существует, он будет заменен. Специальные файлы, такие как символьные или блочные устройства и каналы, не могут быть скопированы с помощью этой функции. src и dst — имена путей, заданные в виде строк.
Взгляните на filesys для всех функций обработки файлов и каталогов, доступных в стандартных модулях Python.
Пример копирования каталога и файла — из материала Тима Голдена по Python:
http://timgolden.me.uk/python/ win32_how_do_i/copy-a-file.html
import osimport shutilimport tempfilefilename1 = tempfile.mktemp (".txt") open (filename1, "w"). close () filename2 = filename1 + ".copy" print filename1, "=>", filename2shutil.copy (filename1, filename2), если os.path. isfile (filename2): print "Success" dirname1 = tempfile.mktemp (".dir") os.mkdir (dirname1) dirname2 = dirname1 + ".copy" print dirname1, "=>", dirname2shutil.copytree (dirname1, dirname2) if os.path.isdir (dirname2): print "Success"
Пример копирования каталогов и файлов — из материалов Python Тима Голдена :
http://timgolden.me.uk/python/win32_how_do_i/copy-a-file.html
import osimport shutilimport tempfilefilename1 = tempfile.mktemp (".txt") open (filename1, "w"). close () filename2 = filename1 + ".copy" print filename1, "=>", filename2shutil.copy (filename1, filename2) if os.path. isfile (filename2): print "Success" dirname1 = tempfile.mktemp (".dir") os.mkdir (dirname1) dirname2 = dirname1 + ".copy" print dirname1, "=>", dirname2shutil.copytree (dirname1, dirname2) if os.path.isdir (dirname2): print "Success"
Во-первых, я сделал для справки исчерпывающий перечень методов shutil.
shutil_methods = {'copy': ['shutil.copyfileobj', 'shutil.copyfile', 'shutil.copymode' , 'shutil.copystat', 'shutil.copy', 'shutil.copy2', 'shutil.copytree',], 'move': ['shutil.rmtree', 'shutil.move',], 'исключение': ['exception shutil.SameFileError', 'exception shutil.Error'], 'other': ['shutil.disk_usage', 'shutil.chown', 'shutil.which', 'shutil.ignore_patterns',]}
Во-вторых, объясните методы копирования в примерах:
shutil.copyfileobj (fsrc, fdst [, length])
управлять открытыми объектами
В [3]: src = '~/Documents/Head + First + SQL.pdf'In [4]: dst = '~/desktop'In [5]: shutil.copyfileobj (src, dst) AttributeError: объект' str 'не имеет атрибута' read '# скопируйте файл objectIn [7]: с open (src, 'rb') как f1, open (os.path.join (dst, 'test.pdf'), 'wb') как f2: ...: shutil.copyfileobj (f1, f2) In [ 8]: os.stat (os.path.join (dst, 'test.p df ')) Out [8]: os.stat_result (st_mode = 33188, st_ino = 8598319475, st_dev = 16777220, st_nlink = 1, st_uid = 501, st_gid = 20, st_size = 13507926, st_atime = 1516067347, st_ctime3 = 1516067347, st_60mtime3 = = 1516067345)
shutil.copyfile (src, dst, *, follow_symlinks = True)
Копировать и переименуйте
В [9]: shutil.copyfile (src, dst) IsADirectoryError: [Errno 21] Это каталог: ~/desktop '# поэтому dst должен быть именем файла вместо имени каталога
shutil. copy ()
Копировать без сохранения метаданных
В [10]: shutil.copy (src, dst) Out [10 ]: ~/desktop/Head + First + SQL.pdf '# проверьте их метаданные In [25]: os.stat (src) Out [25]: os.stat_result (st_mode = 33188, st_ino = 597749, st_dev = 16777220, st_nlink = 1, st_uid = 501, st_gid = 20, st_size = 13507926, st_atime = 1516066425, st_mtime = 1493698739, st_ctime = 1514871215) В [26]: os.stat (os.path.join (dst, 'Head + First + SQL .pdf ')) Out [26]: os.stat_result (st_mode = 33188, st_ino = 8598313736, st_dev = 16777220, st_nlink = 1, st_uid = 501, st_gid = 20, st_size = 13507926, st_atime = 1516066427, st_mtime = 1516066427, st_mtime = 156066427, st_mtime = 156066427, st_mtime = 156066427, st_mtime st_ctime = 1516066425) # st_atime, st_mtime, st_ctime изменено
shutil.copy2 ()
Копировать с сохранение метаданных
В [30]: shutil.copy2 (src, dst) Out [30]: ~/desktop/Head + First + SQL.pdf'In [31]: os.stat (src) Out [31]: os.stat_result (st_mode = 33188, st_ino = 597749, st_dev = 16777220, st_nlink = 1, st_uid = 501, st_gid = 20, st_size = 13507926, st_atime = 1516067055, st_mtime = 1493698739, st_ctime = 1514871215) В [32]: os.stat (os.path.join (dst, 'Head + First + SQL.pdf')) Out [32 ]: os.stat_result (st_mode = 33188, st_ino = 8598313736, st_dev = 16777220, st_nlink = 1, st_uid = 501, st_gid = 20, st_size = 13507926, st_atime = 1516067063, st_mtime = 1493698670739, st_mtime = 1493698670739, st_mtime = 1493698670739) /code>
shutil.copytree()
Рекурсивно копировать все дерево каталогов с корнем в src, возвращая целевой каталог
Во-первых, я сделал для справки исчерпывающий перечень методов shutil.
shutil_methods = {'copy': ['shutil.copyfileobj', 'shutil.copyfile', 'shutil.copymode' , 'shutil.copystat', 'shutil.copy', 'shutil.copy2', 'shutil.copytree',], 'move': ['shutil.rmtree', 'shutil.move',], 'исключение': ['исключение shutil.Sa meFileError ',' exception shutil.Error '],' others ': [' shutil.disk_usage ',' shutil.chown ',' shutil.which ',' shutil.ignore_patterns ',]}
Во-вторых, объясните методы копирования в примерах:
shutil.copyfileobj (fsrc, fdst [, length])
управлять открытыми объектами
В [3]: src = '~/Documents/Head + First + SQL.pdf'In [4]: dst = '~/desktop'In [5]: shutil.copyfileobj (src, dst) AttributeError: объект' str 'не имеет атрибута' read '# скопируйте файл objectIn [7]: с open (src, 'rb') как f1, open (os.path.join (dst, 'test.pdf'), 'wb') как f2: ...: shutil.copyfileobj (f1, f2) В [8]: os. stat (os.path.join (dst, 'test.pdf')) Out [8]: os. stat_result (st_mode = 33188, st_ino = 8598319475, st_dev = 16777220, st_nlink = 1, st_uid = 501, st_gid = 20, st_size = 13507926, st_atime = 1516067347, st_mtime = 1516067335, st_ctime = 15) -
shutil.copyfile (src, dst, *, follow_symlinks = True)
Скопировать и переименовать
В [9]: shutil.copyfile (src, dst) IsADirectoryError: [Errno 21] Это каталог: ~/desktop '# поэтому dst должен быть именем файла вместо имя каталога
-
shutil.copy ()
Копировать без сохранения метаданных
In [10]: shutil.copy (src, dst) Out [10]: ~/desktop/Head + First + SQL.pdf '# проверьте их метаданные [25]: os.stat (src) Out [25]: os.stat_result (st_mode = 33188, st_ino = 597749, st_dev = 16777220, st_nlink = 1, st_uid = 501, st_gid = 20, st_size = 13507926, st_atime = 1516066425 , st_mtime = 1493698739, st_ctime = 1514871215) В [26]: os.stat (os.path.join (dst, 'Head + First + SQL.pdf')) Out [26]: os.stat_re sult (st_mode = 33188, st_ino = 8598313736, st_dev = 16777220, st_nlink = 1, st_uid = 501, st_gid = 20, st_size = 13507926, st_atime = 1516066427, st_mtime = 1516066425, st_cme_time25, st_cme_time25 изменено) /code>
-
shutil.copy2 ()
Копировать с сохранением метаданных
In [30]: shutil.copy2 (src, dst) Out [30]: ~/desktop/Head + First + SQL.pdf'In [31]: os. stat (src) Out [31]: os.stat_result (st_mode = 33188, st_ino = 597749, st_dev = 16777220, st_nlink = 1, st_uid = 501, st_gid = 20, st_size = 13507926, st_atime = 1516067055, st_mtime = 14936_mtime = 149 = 1514871215) В [32]: os.stat (os.path.join (dst, 'Head + First + SQL.pdf')) Out [32]: os.stat_result (st_mode = 33188, st_ino = 8598313736, st_dev = 16777220, st_nlink = 1, st_uid = 501, st_gid = 20, st_size = 13507926, st_atime = 1516067063, st_mtime = 1493698739, st_ctime = 1516067055) # Предустановленное st_mtime
>
shutil.copytree()
Рекурси Верно скопируйте все дерево каталогов с корнем в src, вернув целевой каталог
Для небольших файлов и использования только Python встроенные, вы можете использовать следующий однострочник:
с open (source, 'rb') как src, open (dest, 'wb') as dst: dst.write (src.read ())
Как @maxschlepzig упомянул в комментариях ниже, это не оптимальный способ для приложений, где файл слишком велик или когда память критична , поэтому ответ Свати должен быть предпочтительнее.
Для небольших файлов и использования только встроенных модулей Python вы можно использовать следующий однострочник:
с open (source, 'rb') как src, open (dest, 'wb') как dst: dst.write (src. read ())
Как @maxschlepzig упомянул в комментариях ниже, это не оптимальный способ для приложений, где файл слишком велик или когда память критична, поэтому ответ Свати должен быть предпочтительно.
Вы можете использовать os.system ('cp nameoffilegeneratedbyprogram/otherdirectory/' )
или, как я,
os.system ('cp' + rawfile + 'rawdata.dat')
где rawfile
- это имя, которое я создал внутри программы.
Это решение только для Linux
Вы можете использовать os.system ('cp nameoffilegeneratedbyprogram/otherdirectory/')
или, как я это сделал,
os.system ('cp' + rawfile + 'rawdata.dat')
где rawfile
- это имя, которое я сгенерировал внутри программы.
Это решение только для Linux ution
Для больших файлов я прочитал файл построчно и прочитал каждую строку в массив. Затем, когда массив достигнет определенного размера, добавьте его в новый файл.
для строки в open ("file.txt", "r"): list.append (line) if len (list) == 1000000: output.writelines (list ) del list [:]
Для больших файлов я прочитал файл построчно и прочитал каждую строку в массив. Затем, когда массив достигнет определенного размера, добавьте его в новый файл.
для строки в open ("file.txt", "r"): list.append (line) if len (list) == 1000000: output.writelines (list ) del list [:]
из подпроцесса import callcall (" cp -p ", shell = True)
из подпроцесса import callcall ( "cp -p ", shell = True)
Как из Python 3.5 вы можете сделать следующее для небольших файлов (например, текстовых файлов, небольших файлов JPEG):
from pathlib import Pathsource = Path ('../path/to/ my/file.txt ') destination = Path (' ../path/where/i/want/to/store/it.txt ') destination.write_bytes (source.read_bytes ())
write_bytes
перезапишет все, что было в месте назначения
Начиная с Python 3.5 вы можете сделать следующее для небольших файлов (например: текстовые файлы, маленькие JPEG):
from pathlib import Pathsource = Path ('../path/to/my/ file.txt ') destination = Path (' ../path/where/i/want/to/store/it. txt ') destination.write_bytes (source.read_bytes ())
write_bytes
перезапишет все, что было в месте назначения
open (destination, 'wb'). write (open (source, 'rb'). read ( ))
Открыть исходный файл в режиме чтения и записать в целевой файл в режиме записи.
open (destination, 'wb'). write (open (source, 'rb'). read ())
Открыть исходный файл в режиме чтения и записать в целевой файл в режиме записи.
Вот простой способ сделать это без какого-либо модуля. Он похож на этот ответ, но имеет то преимущество, что он также работает, если это большой файл, который не помещается в ОЗУ:
с open ('sourcefile', 'rb' ) как f, open ('destfile', 'wb') как g: while True: block = f.read (16 * 1024 * 1024) # работать блоками по 16 МБ, если не block: # конец файла break g. write (block)
Поскольку мы пишем новый файл, он не сохраняет время модификации и т. д.
Затем мы можем использовать os.utime
для этого при необходимости.
Вот простой способ сделать это без какого-либо модуля. Он похож на этот ответ, но имеет то преимущество, что он также работает, если это большой файл, который не помещается в ОЗУ:
с open ('sourcefile', 'rb' ) как f, open ('destfile', 'wb') как g: while True: block = f.read (16 * 1024 * 1024) # работать блоками по 16 МБ, если не block: # конец файла break g. write (block)
Поскольку мы пишем новый файл, он не сохраняет время модификации и т. д.
Затем мы можем использовать os.utime
для этого при необходимости.
Если вы зашли так далеко . Ответ заключается в том, что вам нужен полный путь и имя файла
import osshutil.copy (os.path.join (old_dir, file), os.path.join (new_dir, файл))
На случай, если вы зашли так далеко. Ответ заключается в том, что вам нужен полный путь и имя файла
import osshutil.copy (os.path.join (old_dir, file), os.path.join (new_dir, файл))
Как и в принятом ответе, следующий блок кода может пригодиться если вы также хотите создать любые (несуществующие) папки на пути к месту назначения.
из пути импорта ОС, makedirsfrom shutil import copyfilemakedirs (path.dirname (дорожка. abspath (destination_path)), exist_ok = True) copyfile (source_path, destination_path)
Как отмечается в принятых ответах, эти строки будут перезаписывать любой файл, который существует по пути назначения, поэтому иногда может быть полезно также добавить: if not path.exists (destination_path):
перед этим блоком кода.
Подобно принятому ответу, следующий блок кода может пригодиться, если вы также хотите создать какие-либо (несуществующие) папки на пути к месту назначения.
from os import path, makedirsfrom shutil import copyfilemakedirs (path.dirname (path.abspath (destination_path)), exist_ok = True) copyfile (source_path, destination_path)
В качестве Примечания к принятым ответам, эти строки перезапишут любой файл, который существует по пути назначения, поэтому иногда может быть полезно также добавить: , если не path.exists (destination _path):
перед этим блоком кода.