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

avatar
Matt
23 сентября 2008 в 19:23
2483801
21
3006

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

Я не смог найти ничего в разделе os.

Источник

Ответы (21)

avatar
Swati
23 сентября 2008 в 19:25
3712

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

from shutil import copyfile
copyfile(src, dst)

# 2nd option
copy(src, dst)  # dst can be a folder; use copy2() to preserve timestamp
  • Скопируйте содержимое файла с именем src в файл с именем dst. И src, и dst должны быть полными именами файлов, включая путь.
  • Место назначения должно быть доступно для записи; в противном случае возникнет исключение IOError.
  • Если dst уже существует, он будет заменен.
  • Специальные файлы, такие как символьные или блочные устройства и каналы, не могут быть скопированы с помощью этой функции.
  • С copy, src и dst - имена путей, заданные как str s.

Другой метод shutil, на который стоит обратить внимание: shutil.copy2(). Он похож, но сохраняет больше метаданных (например, отметок времени).

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

Matt
23 сентября 2008 в 19:47
183

В чем разница между копией и копией файла?

Owen
23 сентября 2008 в 19:51
444

в копии (src, dst) dst может быть каталогом.

Kevin Horn
19 октября 2009 в 20:50
49

Обратите внимание, что не все метаданные будут скопированы, в зависимости от вашей платформы.

waterbyte
22 октября 2018 в 11:53
19

Обратите внимание, что это не атомарная операция. Будьте осторожны, используя его в многопоточном приложении.

zwep
27 ноября 2018 в 10:00
9

Обратите внимание, что он не может обрабатывать сокращения вроде ~, но может работать с относительными путями.

Jack M
25 декабря 2018 в 14:34
3

@Owen Действительно может, но каталог уже должен существовать. Кстати, пока целевой каталог уже существует, dst может заканчиваться или не заканчиваться косой чертой в конце, это не имеет значения.

Alexei Martianov
3 января 2019 в 05:37
1

Чтобы создать все целевые каталоги промежуточного уровня, вы можете использовать os.makedirs () перед копированием, подробности здесь coderhelper.com/questions/12842997/…

gman
25 ноября 2019 в 03:04
1

shutil на самом деле не копирует файлы. Вверху документов есть большое жирное предупреждение. "это означает, что теряются владелец файла и группа, а также списки управления доступом. В Mac OS вилка ресурсов и другие метаданные не используются. Это означает, что ресурсы будут потеряны, а тип файла и коды создателя будут неправильными. В Windows владельцы файлов, списки управления доступом и альтернативные потоки данных не копируются ».

Martijn Pieters♦
20 марта 2020 в 09:17
1

В Python 3.8 это значительно увеличило скорость (примерно на 50% быстрее, в зависимости от ОС).

Debvrat Varshney
2 августа 2020 в 22:35
0

copy или copyfile, похоже, не заменяют файл, если dst уже существует 🤔. Получение SameFileError

AO_
18 августа 2020 в 06:49
0

Если вы хотите, чтобы изображения были ясны: ao.gl/how-to-copy-a-file-in-python

avatar
Al Baari
6 ноября 2021 в 23:43
-1

shutil.copy(src, dst, *, follow_symlinks=True)

Community
7 ноября 2021 в 00:45
0

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

Eric Aya
7 ноября 2021 в 12:07
1

Это уже упоминалось в других ответах. Отвечая на старые вопросы, на которые уже есть ответы, убедитесь, что вы предоставили либо новое решение, либо значительно лучшее объяснение, чем существующие ответы.

avatar
Raymond Toh
24 сентября 2021 в 10:47
11
Модуль

shutil предлагает некоторые высокоуровневые операции над files. Он поддерживает файлы copying и removal.

Варианты использования см. в таблице ниже.

Функция Использовать
Файловый объект
Сохранить
Метаданные
Сохранить
Разрешения
Поддерживает
Адресат каталога
shutil.copyfileobj
shutil.copyfile
shutil.copy2
shutil.copy
avatar
Leonardo Wildt
13 января 2021 в 20:36
6

На случай, если вы зашли так далеко. Ответ заключается в том, что вам нужен полный путь и имя файла

import os

shutil.copy(os.path.join(old_dir, file), os.path.join(new_dir, file))
avatar
R J
2 января 2021 в 00:56
3

Подобно принятому ответу, следующий блок кода может пригодиться, если вы также хотите создать любые (несуществующие) папки на пути к месту назначения.

from os import path, makedirs
from shutil import copyfile
makedirs(path.dirname(path.abspath(destination_path)), exist_ok=True)
copyfile(source_path, destination_path)

Как отмечается в принятых ответах, эти строки перезапишут любой файл, который существует по пути назначения, поэтому иногда может быть полезно также добавить: if not path.exists(destination_path): перед этим блоком кода.

avatar
Basj
6 декабря 2020 в 12:50
6

Вот простой способ сделать это без какого-либо модуля. Он похож на и этот ответ, но имеет преимущество также в том, что он работает, если это большой файл, который не помещается в ОЗУ:

with open('sourcefile', 'rb') as f, open('destfile', 'wb') as g:
    while True:
        block = f.read(16*1024*1024)  # work by blocks of 16 MB
        if not block:  # end of file
            break
        g.write(block)

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

avatar
Savai Maheshwari
10 июня 2019 в 10:05
-3

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

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

shutil.copy(src,dst)

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

shutil.copystat(src,dst)
ingyhere
22 мая 2020 в 17:25
0

Вы должны запустить copy, затем copystat, чтобы сохранить метаданные файла. В Python 3.3+ copystat также копирует расширенные атрибуты.

avatar
Marc
25 апреля 2019 в 14:09
15

Начиная с 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 перезапишет все, что было в месте назначения

Marcel Waldvogel
29 апреля 2019 в 03:21
2

А затем кто-то использует код (случайно или целенаправленно) в большом файле ... Использование функций из shutil обрабатывает все особые случаи за вас и дает вам душевное спокойствие.

Jean-François Fabre♦
29 апреля 2019 в 18:16
7

по крайней мере, он не повторяет одни и те же решения снова и снова.

avatar
Sundeep471
23 марта 2019 в 00:46
10
open(destination, 'wb').write(open(source, 'rb').read())

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

Raúl Salinas-Monteagudo
29 марта 2019 в 11:06
2

Идея хороша, и код красив, но правильная функция copy () может делать больше вещей, таких как копирование атрибутов (+ x бит) или, например, удаление уже скопированных байтов в случае обнаружения условия переполнения диска. .

miike3459
30 марта 2019 в 22:19
1

Все ответы требуют объяснения, даже если это одно предложение. Никакие объяснения не создают плохой прецедент и не помогают понять программу. Что, если придет полный Python-нуб и увидит это, захочет использовать, но не сможет, потому что не понимает? Вы хотите быть полезным для всех в своих ответах.

luckydonald
22 апреля 2019 в 22:37
3

Разве здесь не хватает .close() на всех этих open(...)?

Sundeep471
23 апреля 2019 в 21:19
0

Нет необходимости в .close (), поскольку мы НЕ СОХРАНЯЕМ объект указателя файла нигде (ни для файла src, ни для файла назначения).

maxschlepzig
29 апреля 2019 в 11:04
2

Тот же неоптимальный подход к потере памяти, что и ответ yellow01.

avatar
kmario23
22 января 2018 в 03:05
157

В 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)

Marcel Waldvogel
29 апреля 2019 в 03:03
10

Использование однострочных команд - плохой стиль кодирования (гибкость, надежность и безопасность), вместо этого используйте синтаксис ['copy', sourcefile, destfile] везде, где это возможно, особенно если параметры вводятся пользователем.

maxschlepzig
29 апреля 2019 в 11:08
11

Почему вы перечисляете так много плохих альтернатив функциям копирования shutil?

Jean-François Fabre♦
29 апреля 2019 в 17:19
12

shutil встроен, нет необходимости предоставлять непереносимые альтернативы. На самом деле ответ можно улучшить, удалив системные решения, и после этого удаления этот ответ будет просто копией существующих ответов / копией документации.

Jean-François Fabre♦
29 апреля 2019 в 18:12
4

os.popen временно устарел. и check_output не возвращает статус, а вывод (который пуст в случае copy/cp)

gman
25 ноября 2019 в 03:03
2

shutil на самом деле не копирует файлы. Вверху документов есть большое жирное предупреждение. "это означает, что теряются владелец файла и группа, а также списки управления доступом. В Mac OS вилка ресурсов и другие метаданные не используются. Это означает, что ресурсы будут потеряны, а тип файла и коды создателя будут неправильными. В Windows владельцы файлов, списки управления доступом и альтернативные потоки данных не копируются ».

avatar
AbstProcDo
16 января 2018 в 03:25
31

Во-первых, я сделал для вас исчерпывающий перечень методов shutil.

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',]
}

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

  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, возвращая целевой каталог

avatar
fabda01
15 августа 2017 в 13:46
29

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

with open(source, 'rb') as src, open(dest, 'wb') as dst: dst.write(src.read())

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

avatar
maxschlepzig
9 июля 2017 в 11:50
160

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

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Function              preserves     supports          accepts     copies other
                      permissions   directory dest.   file obj    metadata  
――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
shutil.copy              ✔             ✔                 ☐           ☐
shutil.copy2             ✔             ✔                 ☐           ✔
shutil.copyfile          ☐             ☐                 ☐           ☐
shutil.copyfileobj       ☐             ☐                 ✔           ☐
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Пример:

import shutil
shutil.copy('/etc/hostname', '/var/tmp/testhostname')
lightalchemist
2 декабря 2018 в 07:40
23

Просто любопытно, как вы создали эту таблицу?

maxschlepzig
2 декабря 2018 в 17:02
29

@lightalchemist Я просто использовал vim в качестве блокнота, скопировал использованные символы Unicode из таблицы википедии и скопировал результат в редактор coderhelper для окончательной доработки.

wim
8 ноября 2019 в 22:04
17

ХОРОШО. YMMV, но я думаю, что косметические изменения и подобные мелкие улучшения лучше вносить в существующие ответы, а не дублировать их.

avatar
deepdive
4 апреля 2016 в 07:08
11

Используйте subprocess.call, чтобы скопировать файл

from subprocess import call
call("cp -p <file> <file>", shell=True)
Kevin Meier
13 сентября 2016 в 10:02
16

Это зависит от платформы, поэтому я бы не стал его использовать.

buhtz
2 апреля 2017 в 07:57
7

Такой call небезопасен. Пожалуйста, обратитесь к документу подпроцесса об этом.

Corey Goldberg
12 июня 2017 в 14:05
4

это не переносимо и не нужно, так как вы можете просто использовать shutil.

Baris Demiray
7 июля 2017 в 09:29
4

Хм, а почему тогда Python?

MilkyWay90
9 ноября 2018 в 15:51
0

Возможно, обнаружите операционную систему перед запуском (будь то DOS или Unix, потому что они наиболее часто используются)

avatar
ytpillai
25 мая 2015 в 05:11
13

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

for line in open("file.txt", "r"):
    list.append(line)
    if len(list) == 1000000: 
        output.writelines(list)
        del list[:]
owns
12 июня 2015 в 17:30
2

это кажется немного избыточным, поскольку писатель должен обрабатывать буферизацию. for l in open('file.txt','r'): output.write(l) должен работать найти; просто настройте буфер выходного потока в соответствии с вашими потребностями. или вы можете перейти к байтам, перебирая попытку с output.write(read(n)); output.flush(), где n - количество байтов, которое вы хотите записать за раз. у обоих из них также нет условия для проверки того, что является бонусом.

ytpillai
13 июня 2015 в 18:42
1

Да, но я подумал, что, возможно, это будет легче понять, потому что он копирует целые строки, а не их части (на случай, если мы не знаем, сколько байтов в каждой строке).

owns
15 июня 2015 в 17:47
0

Совершенно верно. Кодирование для обучения и кодирование для повышения эффективности очень разные.

ytpillai
30 ноября 2016 в 03:33
0

@owns Чтобы добавить к этому вопросу год спустя, writelines() показал немного лучшую производительность по сравнению с write(), поскольку мы не тратим время на постоянное открытие нового файлового потока, а вместо этого записываем новые строки как один большой поток байтов.

owns
3 мая 2017 в 00:24
1

глядя на источник - Writelines вызывает write, hg.python.org/cpython/file/c6880edaf6f3/Modules/_io/bytesio.c. Кроме того, файловый поток уже открыт, поэтому записи не нужно будет открывать его каждый раз заново.

maxschlepzig
29 апреля 2019 в 19:04
2

Это ужасно. Он выполняет ненужную работу без уважительной причины. Это не работает для произвольных файлов. Копия не идентична байтам, если входные данные имеют необычные окончания строк в таких системах, как Windows. Как вы думаете, почему это проще понять, чем вызов функции копирования в shutil? Даже при игнорировании shutil простой цикл чтения / записи блока (с использованием небуферизованного ввода-вывода) будет прямым, будет эффективным и будет иметь гораздо больше смысла, чем этот, и, следовательно, его, безусловно, легче научить и понять.

Martijn Pieters♦
20 марта 2020 в 09:13
0

Это также увеличивает накладные расходы на декодирование / кодирование и не работает с двоичными данными. Просто используйте shutil.copyfile() , который в 3.8 был дополнительно улучшен, чтобы использовать встроенную поддержку ОС для быстрого копирования файлов. Это легко займет меньше половины времени от того, что займет этот ответ.

avatar
jezrael
20 мая 2015 в 20:01
1660
Функция Копирует
метаданные
Копирует
разрешения
Использует файловый объект Назначением
может быть каталог
shutil.copy Нет Да Нет Да
shutil.copyfile Нет Нет Нет Нет
shutil.copy2 Да Да Нет Да
shutil.copyfileobj Нет Нет Да Нет
avatar
mark
19 декабря 2014 в 23:18
17

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

или, как я,

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

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

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

Corey Goldberg
12 июня 2017 в 14:05
11

это не переносимо и не нужно, так как вы можете просто использовать shutil.

maxschlepzig
9 июля 2017 в 11:52
5

Даже когда shutil недоступен - subprocess.run() (без shell=True!) Является лучшей альтернативой os.system().

Hiadore
12 марта 2019 в 09:07
2

shutil более портативный

Marcel Waldvogel
29 апреля 2019 в 03:09
2

subprocess.run(), предложенный @maxschlepzig, является большим шагом вперед при вызове внешних программ. Однако для гибкости и безопасности используйте форму ['cp', rawfile, 'rawdata.dat'] передачи командной строки. (Однако для копирования рекомендуется shutil и друзьям вместо вызова внешней программы.)

Jean-François Fabre♦
29 апреля 2019 в 17:21
2

попробуйте это с именами файлов с пробелами.

avatar
Noam Manos
15 марта 2011 в 10:11
49

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

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"
avatar
pi.
24 сентября 2008 в 07:21
105

Копирование файла - относительно простая операция, как показано в примерах ниже, но вместо этого вы должны использовать для этого модуль 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)
pi.
31 марта 2009 в 15:20
25

Некоторое время назад я заметил, что модуль называется shutil (единственное число), а не shutils (множественное число), и действительно, это - это в Python 2.3. Тем не менее, я оставляю эту функцию здесь в качестве примера.

avatar
unmounted
23 сентября 2008 в 19:29
846

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
Vijay
7 мая 2014 в 08:31
33

Я пытаюсь случайным образом скопировать 100k файлов из 1 миллиона файлов. copyfile значительно быстрее, чем copy2

avatar
Airsource Ltd
23 сентября 2008 в 19:27
76

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

copyfile(src, dst)

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

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