Как мне скопировать файл в Python?

Как мне скопировать файл в Python?

Я не мог найти ничего под os.

23.09.2008 19:23:48
Кажется, что cp не является системным вызовом и поэтому не принадлежит модулю os. Это команда оболочки, поэтому она помещается в модуль shutil.
waldol1 16.10.2013 20:58:52
16 ОТВЕТОВ
РЕШЕНИЕ

shutilЕсть много методов, которые вы можете использовать. Одним из которых является:

from shutil import copyfile
copyfile(src, dst)
  • Скопируйте содержимое файла с именем src в файл с именем dst .
  • Место назначения должно быть доступно для записи; в противном случае возникнет исключение IOError .
  • Если dst уже существует, он будет заменен.
  • Специальные файлы, такие как символьные или блочные устройства и каналы, не могут быть скопированы с помощью этой функции.
  • С копией , СРК и целевой_адрес имена путей , приведенные в строках .

Если вы используете os.pathоперации, используйте copyвместо того, copyfile.copyfileчтобы принимать только строки .

2927
3.03.2020 12:06:13
В чем разница между копией и копировальным файлом?
Matt 23.09.2008 19:47:01
в копии (src, dst) dst может быть каталогом.
Owen 23.09.2008 19:51:07
Обратите внимание, что не все метаданные будут скопированы, в зависимости от вашей платформы.
Kevin Horn 19.10.2009 20:50:27
Обратите внимание, что это не атомарная операция. Будьте осторожны, используя его в резьбовом приложении.
waterbyte 22.10.2018 11:53:51
Обратите внимание, что он не может обрабатывать сокращения, как ~, но он может иметь дело с относительными путями
zwep 27.11.2018 10:00:06

Используйте модуль shutil .

copyfile(src, dst)

Скопируйте содержимое файла с именем src в файл с именем dst. Место назначения должно быть доступно для записи; в противном случае возникнет исключение IOError. Если dst уже существует, он будет заменен. Специальные файлы, такие как символьные или блочные устройства и каналы, не могут быть скопированы с помощью этой функции. src и dst - это имена путей, заданные в виде строк.

Посмотрите на filesys все функции обработки файлов и каталогов, доступные в стандартных модулях Python.

68
7.09.2014 13:06:51
Шутил на самом деле не копирует файлы. Есть большое толстое предупреждение прямо наверху документов . «Это означает, что владелец файла и группа будут потеряны, а также ACL. В Mac OS не используются ветвь ресурса и другие метаданные. Это означает, что ресурсы будут потеряны, а тип файла и коды создателя будут неправильными. В Windows владельцы файлов, списки ACL и альтернативные потоки данных не копируются ».
gman 25.11.2019 03:03:44

copy2(src,dst)часто полезнее, чем copyfile(src,dst)потому что:

  • это позволяет dstбыть каталог (вместо полного целевого файла), в этом случае базовый из srcиспользуются для создания нового файла;
  • он сохраняет исходную информацию о модификации и доступе (mtime и atime) в метаданных файла (однако это идет с небольшими издержками).

Вот краткий пример:

import shutil
shutil.copy2('/src/dir/file.ext', '/dst/dir/newname.ext') # complete target filename given
shutil.copy2('/src/file.ext', '/dst/dir') # target filename is /dst/dir/file.ext
717
13.03.2017 17:56:16
Я пытаюсь случайным образом скопировать 100 000 файлов из 1 миллиона файлов. copyfileзначительно быстрее, чемcopy2
Vijay 7.05.2014 08:31:38
Правильно ли предположить, что shutil.copy2('/dir/file.ext', '/new/dir/')(с косой чертой после целевого пути) удалит неоднозначность в отношении того, копировать ли в новый файл с именем «dir» или поместить файл в каталог с таким именем?
Zak 19.08.2015 18:56:38
@ Виджай Я считаю, что это связано с копированием метаданных.
Jonathan H 13.03.2017 17:57:30
@Zak Нет никакой двусмысленности, если /new/dirсуществует существующий каталог, см. Комментарий @ MatthewAlpert.
Jonathan H 13.03.2017 18:14:31
@Zak Вы правы, добавление косой черты в конец устраняет неоднозначность. Если /new/dir/он не существует, Python сгенерирует IsADirectoryError, в противном случае он копирует файл с /new/dir/исходным именем.
martonbognar 7.06.2018 12:00:25

Копирование файла является относительно простой операцией, как показано в примерах ниже, но вместо этого вам следует использовать модуль shutil stdlib .

def copyfileobj_example(source, dest, buffer_size=1024*1024):
    """      
    Copy a file from source to dest. source and dest
    must be file-like objects, i.e. any object with a read or
    write method, like for example StringIO.
    """
    while True:
        copy_buffer = source.read(buffer_size)
        if not copy_buffer:
            break
        dest.write(copy_buffer)

Если вы хотите скопировать по имени файла, вы можете сделать что-то вроде этого:

def copyfile_example(source, dest):
    # Beware, this example does not handle any edge cases!
    with open(source, 'rb') as src, open(dest, 'wb') as dst:
        copyfileobj_example(src, dst)
95
10.04.2018 15:27:55
Некоторое время назад я заметил, что модуль называется shutil (единственное число), а не shutils (множественное число), и действительно он есть в Python 2.3. Тем не менее я оставляю эту функцию здесь в качестве примера.
pi. 31.03.2009 15:20:03
Копирование содержимого файла является простой операцией. Копировать файл с его метаданными совсем не просто, особенно если вы хотите быть кроссплатформенным.
LaC 16.01.2012 18:01:40
Правда. Глядя на документы shutil, функция copyfile также не будет копировать метаданные.
pi. 17.01.2012 15:08:42
Да, я не уверен, почему бы вам не скопировать источник shutil.copyfileobj. Кроме того, вам не нужно try, finallyобрабатывать закрытие файлов после исключений. Однако я бы сказал, что ваша функция вообще не должна отвечать за открытие и закрытие файлов. Это должно идти в функции-обертке, например, как shutil.copyfileобертки shutil.copyfileobj.
ErlVolton 28.10.2014 18:48:48
Приведенный выше код должен destбыть указан для записи:open(dest, 'wb')
user1016274 28.05.2015 14:56:00

Пример копирования каталога и файла - из материала Питона Тима Голдена:

http://timgolden.me.uk/python/win32_how_do_i/copy-a-file.html

import os
import shutil
import tempfile

filename1 = tempfile.mktemp (".txt")
open (filename1, "w").close ()
filename2 = filename1 + ".copy"
print filename1, "=>", filename2

shutil.copy (filename1, filename2)

if os.path.isfile (filename2): print "Success"

dirname1 = tempfile.mktemp (".dir")
os.mkdir (dirname1)
dirname2 = dirname1 + ".copy"
print dirname1, "=>", dirname2

shutil.copytree (dirname1, dirname2)

if os.path.isdir (dirname2): print "Success"
46
15.03.2011 10:11:21

Вы могли бы использовать os.system('cp nameoffilegeneratedbyprogram /otherdirectory/')

или как я это сделал,

os.system('cp '+ rawfile + ' rawdata.dat')

где rawfileэто имя, которое я сгенерировал внутри программы.

Это решение только для Linux

13
19.12.2014 23:23:19
это не переносимо и не нужно, так как вы можете просто использовать shutil.
Corey Goldberg 12.06.2017 14:05:17
Даже когда shutilнет в наличии - subprocess.run() (без shell=True!) Лучшая альтернатива os.system().
maxschlepzig 9.07.2017 11:52:44
Шутиль более портативен
Hiadore 12.03.2019 09:07:45
subprocess.run()как подсказывает @maxschlepzig, это большой шаг вперед при вызове внешних программ. Однако для гибкости и безопасности используйте ['cp', rawfile, 'rawdata.dat']форму передачи командной строки. (Однако для копирования shutilрекомендуется и друзьям вызывать внешнюю программу.)
Marcel Waldvogel 29.04.2019 03:09:48
попробуйте это с именами файлов с пробелами в нем.
Jean-François Fabre♦ 29.04.2019 17:21:58
┌──────────────────┬────────┬───────────┬───────┬────────────────┐
│     Function     │ Copies │   Copies  │Can use│   Destination  │
│                  │metadata│permissions│buffer │may be directory│
├──────────────────┼────────┼───────────┼───────┼────────────────┤
│shutil.copy       │   No   │    Yes    │   No  │      Yes       │
│shutil.copyfile   │   No   │     No    │   No  │       No       │
│shutil.copy2      │  Yes   │    Yes    │   No  │      Yes       │
│shutil.copyfileobj│   No   │     No    │  Yes  │       No       │
└──────────────────┴────────┴───────────┴───────┴────────────────┘
1200
21.10.2019 10:10:51
Можно также добавить эту копию и copy2 принять каталог в качестве места назначения, в отличие от copyfile, который требует указать полное имя.
Conchylicultor 10.10.2016 18:47:58
@jezrael Извлечено из документа: dst must be the complete target file name; look at shutil.copy() for a copy that accepts a target directory path.(здесь: docs.python.org/3/library/shutil.html#shutil.copyfile )
Conchylicultor 1.02.2017 21:48:44
Теперь это просто плохой, плохой дизайн API.
One Man Monkey Squad 16.01.2019 13:51:32
Что обозначает столбец «Dest dir OK»? Означает ли это, что он не проверяет, в порядке ли каталог назначения перед копированием?
Katie 7.02.2019 22:00:55
@KatieS "Dest dir OK" указывает, можно ли указывать каталог в качестве места назначения, а не файла. Из документации shutil.copy(src, dst, *, follow_symlinks=True)(также относится к copy2): «Если dst указывает каталог, файл будет скопирован в dst с использованием базового имени файла из src ».
Nathaniel Jones 8.04.2019 00:13:55

Для больших файлов я построчно читал файл и читал каждую строку в массив. Затем, когда массив достигнет определенного размера, добавьте его в новый файл.

for line in open("file.txt", "r"):
    list.append(line)
    if len(list) == 1000000: 
        output.writelines(list)
        del list[:]
10
25.05.2015 05:11:47
это кажется немного излишним, так как писатель должен обрабатывать буферизацию. for l in open('file.txt','r'): output.write(l)должен работать найти; просто настройте буфер потока вывода в соответствии с вашими потребностями. или вы можете переходить по байтам, повторяя попытку, output.write(read(n)); output.flush()где nуказано количество байтов, которое вы хотите записать за раз. оба из них также не имеют условия, чтобы проверить, что является бонусом.
owns 12.06.2015 17:30:16
Да, но я подумал, что, возможно, это будет легче понять, потому что он копирует целые строки, а не их части (в случае, если мы не знаем, сколько байтов каждая строка).
ytpillai 13.06.2015 18:42:08
Очень верно. Кодирование для обучения и кодирование для эффективности очень разные.
owns 15.06.2015 17:47:45
глядя на источник - writelines вызывает write, hg.python.org/cpython/file/c6880edaf6f3/Modules/_io/bytesio.c . Кроме того, файловый поток уже открыт, поэтому для записи не нужно будет снова открывать его каждый раз.
owns 3.05.2017 00:24:46
Это ужасно Это делает ненужную работу без уважительной причины. Это не работает для произвольных файлов. Копия не идентична байту, если ввод имеет необычные окончания строк в таких системах, как Windows. Почему вы думаете, что это может быть легче понять, чем вызов функции копирования в shutil? Даже при игнорировании shutilпростой цикл чтения / записи блока (с использованием небуферизованного ввода-вывода) является прямым, эффективным и имеет гораздо больший смысл, чем этот, и, следовательно, его легче учить и понимать.
maxschlepzig 29.04.2019 19:04:40
from subprocess import call
call("cp -p <file> <file>", shell=True)
10
4.04.2016 07:08:24
Это зависит от платформы, поэтому я бы не стал использовать.
Kevin Meier 13.09.2016 10:02:06
Такое callнебезопасно. Пожалуйста, обратитесь к документу subproces об этом.
buhtz 2.04.2017 07:57:45
это не переносимо и не нужно, так как вы можете просто использовать shutil.
Corey Goldberg 12.06.2017 14:05:24
Хм, почему Python, тогда?
Baris Demiray 7.07.2017 09:29:27
Возможно, определите операционную систему перед запуском (будь то DOS или Unix, потому что они наиболее часто используются)
MilkyWay90 9.11.2018 15:51:05

Вы можете использовать одну из функций копирования из shutilпакета:

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Функция сохраняет поддерживает принимает копии других
                      каталог разрешений dest. метаданные файла obj  
-------------------------------------------------- ----------------------------
shutil.copy               ☐ ✔ ☐ ☐
 shutil.copy2              ✔ ✔ ☐ ✔
 shutil.copyfile           ☐ ☐ ☐ ☐
 shutil.copyfileobj        ☐ ☐ ✔ ☐
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Пример:

import shutil
shutil.copy('/etc/hostname', '/var/tmp/testhostname')
123
15.08.2018 17:26:20
Просто любопытно, как вы создали эту таблицу?
lightalchemist 2.12.2018 07:40:25
@lightalchemist Я просто использовал vim в качестве блокнота, скопировал использованные символы юникода из таблицы википедии и скопировал результат в редактор стека переполнения для окончательной полировки.
maxschlepzig 2.12.2018 17:02:38
Чем это отличается от другого ответа 2 года назад? stackoverflow.com/a/30359308/674039
wim 8.11.2019 21:22:07
@wim, вы должны сравнить мой ответ с версией ответа 2017 года, которую вы связали, которая была актуальна, когда я опубликовал свой ответ. Основные различия: в моем ответе используются более качественные / более описательные заголовки столбцов, макет таблицы не отвлекает, он включает прямые ссылки в документацию, и я добавил столбец (т. Е. «Принимает файл obj»).
maxschlepzig 8.11.2019 21:58:09
ОК. YMMV, но я думаю, что косметические изменения и мелкие улучшения, подобные этим, лучше вносить в виде изменений существующих ответов, чем дублирования ответов.
wim 8.11.2019 22:04:24

Для небольших файлов и использования только встроенных Python, вы можете использовать следующую однострочную:

with open(source, 'r') as src, open(dest, 'w') as dst: dst.write(src.read())

Как @maxschlepzig упомянул в комментариях ниже, это не оптимальный способ для приложений, где файл слишком велик или когда память критична, поэтому ответ Свати должен быть предпочтительным.

18
29.04.2019 18:36:04
Это читает весь исходный файл в память, прежде чем записать его обратно. Таким образом, это излишне тратит впустую память для всех, кроме самых маленьких операций копирования файла.
maxschlepzig 2.10.2017 07:11:47
Это правда? Я думаю .read()и .write()буферизируется по умолчанию (по крайней мере для CPython).
soundstripe 17.11.2017 01:39:52
@soundstripe, конечно, это правда. Тот факт, что объект file, возвращаемый с помощью open()буферизированного ввода-вывода, по умолчанию вам здесь не поможет, поскольку read()он указан как: «Если n отрицательно или опущено, читайте до EOF». Это означает, что read()возвращает полное содержимое файла в виде строки.
maxschlepzig 29.04.2019 11:00:56
@maxschlepzig Я понял вашу точку зрения и признаюсь, что не знал об этом. Причина, по которой я дал этот ответ, заключалась в том, что кто-то хотел сделать простую копию файла, используя только встроенные модули, без необходимости импортировать для него модуль. Конечно, оптимизация памяти не должна быть проблемой, если вы хотите эту опцию. В любом случае, спасибо, что очистили это. Я обновил ответ соответственно.
yellow01 29.04.2019 18:36:08

Во-первых, я сделал исчерпывающую таблицу методов шутиля для вашей справки.

shutil_methods =
{'copy':['shutil.copyfileobj',
          'shutil.copyfile',
          'shutil.copymode',
          'shutil.copystat',
          'shutil.copy',
          'shutil.copy2',
          'shutil.copytree',],
 'move':['shutil.rmtree',
         'shutil.move',],
 'exception': ['exception shutil.SameFileError',
                 'exception shutil.Error'],
 'others':['shutil.disk_usage',
             'shutil.chown',
             'shutil.which',
             'shutil.ignore_patterns',]
}

Во-вторых, объясните методы копирования в exmaples:

  1. shutil.copyfileobj(fsrc, fdst[, length]) манипулировать открытыми объектами
In [3]: src = '~/Documents/Head+First+SQL.pdf'
In [4]: dst = '~/desktop'
In [5]: shutil.copyfileobj(src, dst)
AttributeError: 'str' object has no attribute 'read'
#copy the file object
In [7]: with open(src, 'rb') as f1,open(os.path.join(dst,'test.pdf'), 'wb') as f2:
    ...:      shutil.copyfileobj(f1, f2)
In [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=1516067345)
  1. shutil.copyfile(src, dst, *, follow_symlinks=True) Скопируйте и переименуйте
In [9]: shutil.copyfile(src, dst)
IsADirectoryError: [Errno 21] Is a directory: ~/desktop'
#so dst should be a filename instead of a directory name
  1. shutil.copy() Копировать без сохранения метаданных
In [10]: shutil.copy(src, dst)
Out[10]: ~/desktop/Head+First+SQL.pdf'
#check their metadata
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)
In [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=1516066425, st_ctime=1516066425)
# st_atime,st_mtime,st_ctime changed
  1. 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=1493698739, st_ctime=1514871215)
In [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)
# Preseved st_mtime
  1. shutil.copytree()

Рекурсивно скопируйте целое дерево каталогов с корнем в src, возвращая каталог назначения

23
8.07.2019 05:34:41
Шутил на самом деле не копирует файлы. Есть большое толстое предупреждение прямо наверху документов . «Это означает, что владелец файла и группа будут потеряны, а также ACL. В Mac OS не используются ветвь ресурса и другие метаданные. Это означает, что ресурсы будут потеряны, а тип файла и коды создателя будут неправильными. В Windows владельцы файлов, списки ACL и альтернативные потоки данных не копируются ».
gman 25.11.2019 03:03:59

В Python вы можете скопировать файлы, используя


import os
import shutil
import subprocess

1) Копирование файлов с использованием shutilмодуля

shutil.copyfile подпись

shutil.copyfile(src_file, dest_file, *, follow_symlinks=True)

# example    
shutil.copyfile('source.txt', 'destination.txt')

shutil.copy подпись

shutil.copy(src_file, dest_file, *, follow_symlinks=True)

# example
shutil.copy('source.txt', 'destination.txt')

shutil.copy2 подпись

shutil.copy2(src_file, dest_file, *, follow_symlinks=True)

# example
shutil.copy2('source.txt', 'destination.txt')  

shutil.copyfileobj подпись

shutil.copyfileobj(src_file_object, dest_file_object[, length])

# example
file_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]])

# example
# In Unix/Linux
os.popen('cp source.txt destination.txt') 

# In Windows
os.popen('copy source.txt destination.txt')

os.system подпись

os.system(command)


# In Linux/Unix
os.system('cp source.txt destination.txt')  

# In Windows
os.system('copy source.txt destination.txt')

3) Копирование файлов с использованием subprocessмодуля

subprocess.call подпись

subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False)

# example (WARNING: setting `shell=True` might be a security-risk)
# In Linux/Unix
status = subprocess.call('cp source.txt destination.txt', shell=True) 

# In Windows
status = 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)

# example (WARNING: setting `shell=True` might be a security-risk)
# In Linux/Unix
status = subprocess.check_output('cp source.txt destination.txt', shell=True)

# In Windows
status = subprocess.check_output('copy source.txt destination.txt', shell=True)

101
22.01.2018 03:05:32
Использование однострочных команд является плохим стилем кодирования (гибкость, надежность и безопасность), вместо этого используйте ['copy', sourcefile, destfile]везде, где это возможно, синтаксис, особенно если параметры получены из пользовательского ввода.
Marcel Waldvogel 29.04.2019 03:03:26
Почему вы перечисляете так много плохих альтернатив функциям копирования shutil?
maxschlepzig 29.04.2019 11:08:39
shutil встроен, нет необходимости предоставлять непереносимые альтернативы. Ответ может быть фактически улучшен путем удаления системно-зависимых решений, и после этого удаления этот ответ является просто копией существующих ответов / копией документации.
Jean-François Fabre♦ 29.04.2019 17:19:34
os.popenна некоторое время устарела. и check_outputне возвращает статус, но вывод (который пустой в случае copy/cp)
Jean-François Fabre♦ 29.04.2019 18:12:11
Шутил на самом деле не копирует файлы. Есть большое толстое предупреждение прямо наверху документов . «Это означает, что владелец файла и группа будут потеряны, а также ACL. В Mac OS не используются ветвь ресурса и другие метаданные. Это означает, что ресурсы будут потеряны, а тип файла и коды создателя будут неправильными. В Windows владельцы файлов, списки ACL и альтернативные потоки данных не копируются ».
gman 25.11.2019 03:03:14
open(destination, 'wb').write(open(source, 'rb').read())

Откройте исходный файл в режиме чтения и запишите в целевой файл в режиме записи.

5
29.04.2019 18:15:52
Идея хороша, а код красив, но правильная функция copy () может делать больше вещей, таких как копирование атрибутов (+ x бит), или, например, удаление уже скопированных байтов в случае обнаружения условия заполнения диска ,
Raúl Salinas-Monteagudo 29.03.2019 11:06:57
Все ответы требуют объяснения, даже если это одно предложение. Никакие объяснения не создают плохой прецедент и не помогают понять программу. Что если полный нуб Python придет и увидит это, захочет его использовать, но не сможет, потому что они этого не понимают? Вы хотите быть полезными для всех в своих ответах.
connectyourcharger 30.03.2019 22:19:25
Разве это не скучает .close()по всем этим open(...)с?
luckydonald 22.04.2019 22:37:33
Нет необходимости в .close (), поскольку мы нигде не храним объект указателя файла (ни для файла src, ни для файла назначения).
S471 23.04.2019 21:19:20
Тот же самый неоптимальный подход, тратящий память, как ответ yellow01 .
maxschlepzig 29.04.2019 11:04:38

Начиная с Python 3.5 вы можете делать следующее для небольших файлов (например, текстовые файлы, маленькие JPEG-файлы):

from pathlib import Path

source = Path('../path/to/my/file.txt')
destination = Path('../path/where/i/want/to/store/it.txt')
destination.write_bytes(source.read_bytes())

write_bytes перезапишет все, что было в месте назначения

7
25.04.2019 14:09:14
И затем кто-то использует код (случайно или целенаправленно) для большого файла ... Использование функций из них shutilобрабатывает все особые случаи для вас и дает вам душевное спокойствие.
Marcel Waldvogel 29.04.2019 03:21:10
по крайней мере, это не повторяет одни и те же решения снова и снова.
Jean-François Fabre♦ 29.04.2019 18:16:27

Python предоставляет встроенные функции для простого копирования файлов с помощью утилит операционной системы.

Следующая команда используется для копирования файла

shutil.copy(src,dst)

Следующая команда используется для копирования файла с информацией метаданных

shutil.copystat(src,dst)
-4
10.06.2019 10:05:55