Копирование файлов в Python

Обновлено: 21.11.2024

Python поставляется со многими готовыми модулями (такими как os, subprocess и Shutil) для поддержки операций файлового ввода-вывода. И в этом посте вы увидите несколько уникальных способов копирования файла в Python. Итак, давайте начнем изучать девять различных методов выполнения операции копирования файла Python.

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

Некоторые программы, использующие общие ресурсы, предпочитают копировать файл в блокирующем режиме, в то время как другие могут захотеть сделать это асинхронно. Например — использовать поток для копирования файла или запустить для этого отдельный процесс. Еще один момент, который следует учитывать, — это переносимость платформы. Это означает, что вы должны знать целевую ОС (Windows/Linux/Mac OS X и т. д.), где бы вы ни запускали программу.

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

Как сделать Python Copy File — 9 способов научиться.

Вот девять способов демонстрации «Как скопировать файл в Python?».

1. метод Shutil copyfile()

Этот метод копирует содержимое источника в место назначения, только если место назначения доступно для записи. Если у вас нет нужных разрешений, это вызовет ошибку IOError.

Он работает, открывая входной файл для чтения, игнорируя его тип файла.

Далее, он не обрабатывает специальные файлы по-другому и не создает их клоны.

Метод copyfile() использует нижележащую функцию copyfileobj(). Он принимает имена файлов в качестве аргументов, открывает их и передает дескрипторы файлов в функцию copyfileobj(). В этом методе есть один необязательный третий аргумент, который вы можете использовать для указания длины буфера. Затем он откроет файл для чтения кусками указанного размера буфера. Однако поведение по умолчанию — чтение всего файла за один раз.

Ниже приведены сведения о методе copyfile().

  • Содержимое источника копируется в файл с именем назначения.
  • Если место назначения недоступно для записи, операция копирования приведет к исключению IOError.
  • Он вернет SameFileError, если исходный и конечный файлы совпадают.
  • Однако, если место назначения уже существует с другим именем, копия перезапишет его содержимое.
  • Ошибка 13 возникнет, если местом назначения является каталог, что означает, что этот метод не будет копировать в папку.
  • Он не поддерживает копирование файлов, таких как символьные или блочные устройства и каналы.

2. метод Shutil copy()

Метод copy() функционирует так же, как команда «cp» в Unix. Это означает, что если целью является папка, то внутри нее будет создан новый файл с тем же именем (базовым именем), что и у исходного файла. Кроме того, этот метод синхронизирует разрешения целевого файла с источником после копирования его содержимого. Он также выдает ошибку SameFileError, если вы копируете один и тот же файл.

copy() и copyfile() —

  1. Copy() также устанавливает биты разрешения при копировании содержимого, тогда как copyfile() копирует только данные.
  2. Copy() скопирует файл, если местом назначения является каталог, тогда как copyfile() завершится с ошибкой 13.
  3. Интересно, что метод copyfile() использует в своей реализации метод copyfileobj(), тогда как метод copy() по очереди использует функции copyfile() и copymode().
  4. Точка 3 делает очевидным, что функция copyfile() будет немного быстрее, чем функция copy(), поскольку у последней есть дополнительная задача (сохранение разрешений).

3. метод Shutil copyfileobj()

Этот метод копирует файл в целевой путь или файловый объект. Если целью является файловый объект, вам необходимо явно закрыть его после вызова функции copyfileobj(). Он предполагает необязательный аргумент (размер буфера), который вы можете использовать для указания длины буфера. Это количество байтов, сохраняемых в памяти в процессе копирования. Размер по умолчанию, используемый системой, составляет 16 КБ.

4. метод hidel copy2()

Однако метод copy2() работает так же, как и метод copy(). Но он также получает время доступа и модификации, добавленное в метаданные при копировании данных. Копирование того же файла приведет к ошибке SameFileError.

copy() и copy2()

  1. Copy() устанавливает только биты разрешения, тогда как copy2() также обновляет метаданные файла с отметками времени.
  2. Метод copy() вызывает copyfile() и copymode() внутри, тогда как copy2() заменяет вызов copymode() на copystat().

copymode() и copystat()

shutil.copymode()

  • Он намеревается скопировать биты разрешений из исходного файла в целевые файлы.
  • Содержимое файла, владелец и группа остаются неизменными. Передаваемые аргументы являются строками.
  • Если аргумент follow_symlinks имеет значение false, а первые два аргумента являются символическими ссылками, функция copymode() попытается обновить целевую ссылку, а не фактический файл, на который она указывает.

shutil.copystat()

  • Он пытается сохранить биты разрешений, время последнего использования/время обновления и флаги целевого файла.
  • Копиястат() включает расширенные атрибуты при копировании в Linux. Содержимое файла/владелец/группа остаются неизменными.
  • Если аргумент follow_symlinks имеет значение false и первые два аргумента являются символическими ссылками, функция copystat() обновит их, а не файлы, на которые они указывают.

5. метод os popen()

Этот метод создает канал к команде или от нее. Он возвращает объект открытого файла, который подключается к каналу. Вы можете использовать его для чтения или записи в зависимости от режима файла, т. е. «r» (по умолчанию) или «w».

  • режим — может быть «r» (по умолчанию) или «w».
  • bufsize — если его значение равно 0, буферизация не выполняется. Если bufsize равен 1, то при доступе к файлу будет выполняться буферизация строк. Если вы укажете значение больше 1, то буферизация будет происходить с указанным размером буфера. Однако для отрицательного значения система примет размер буфера по умолчанию.

Для ОС Windows.

Для ОС Linux.

6. метод ОС()

Метод system() позволяет мгновенно выполнить любую команду ОС или сценарий в подоболочке.

Вам необходимо передать команду или скрипт в качестве аргумента для вызова system(). Внутри этот метод вызывает стандартную библиотечную функцию C.

Его возвращаемое значение является статусом завершения команды.

Для ОС Windows.

Для ОС Linux.

7. Копирование файла Python с использованием библиотеки потоков в асинхронном режиме

Если вы хотите скопировать файл асинхронно, используйте метод, описанный ниже. Здесь мы использовали модуль Python threading для запуска операции копирования в фоновом режиме.

При использовании этого метода обязательно используйте блокировку, чтобы избежать взаимоблокировок. Вы можете столкнуться с этим, если ваше приложение использует несколько потоков для чтения/записи файла.

8. Используйте метод call() подпроцесса для копирования файла в Python

Модуль подпроцессов предоставляет простой интерфейс для работы с дочерними процессами. Это позволяет нам запускать подпроцессы, присоединяться к их каналам ввода/вывода/ошибки и получать возвращаемые значения.

Модуль подпроцесса призван заменить устаревшие модули и функции, такие как os.system, os.spawn*, os.popen*, popen2.*.

Он предоставляет метод call() для вызова системных команд для выполнения пользовательских задач.

9. Используйте метод check_output() подпроцесса для копирования файла в Python

С помощью метода check_output() подпроцесса вы можете запустить внешнюю команду или программу и зафиксировать ее вывод. Он также поддерживает трубы.

Резюме. Методы копирования файлов Python для изучения

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

Модули os, subprocess и Shutil в Python обеспечивают огромную поддержку файловых операций ввода-вывода. Однако здесь мы рассмотрели только методы копирования файлов Python. Но вы увидите много новых и интуитивно понятных способов делать и другие вещи в наших будущих публикациях.

Наконец, если вам понравился этот пост, пожалуйста, поделитесь им. Чтобы оставаться на связи, подпишитесь на нас в Facebook и Twitter.

Лучший,

TechBeamers

Вам также может понравиться

Статический метод в Python

18 марта 2019 г.

Питон с плавающей запятой()

3 августа 2019 г.

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

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

Еще один метод Shutil, на который стоит обратить внимание, — это Shutil.copy2() . Он похож, но сохраняет больше метаданных (например, метки времени).

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

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

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

Функция Копирует
метаданные
Копирует
разрешения
Использует файловый объект Назначение
может быть каталогом
shutil.copy Нет Да Нет Да
shutil.copyfile Нет Нет Нет Нет
shutil.copy2 Да Да< /td> Нет Да
shutil.copyfileobj Нет Нет Да Нет

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

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

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

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

В Python вы можете копировать файлы с помощью

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

подпись Shutil.copyfile

подпись Shutil.copy

подпись Shutil.copy2

подпись Shutil.copyfileobj

2) Копирование файлов с помощью модуля os

подпись os.popen

подпись os.system

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

подпись subprocess.call

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. shutil.copyfileobj(fsrc, fdst[, length]) управляет открытыми объектами
  1. shutil.copyfile(src, dst, *, follow_symlinks=True) Копировать и переименовать
  1. шутил.copy() Копировать без сохранения метаданных
  1. shutil.copy2() Копировать с сохранением метаданных

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

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

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

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

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

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

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

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

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

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

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

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

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

В этой статье мы обсудим, как копировать файлы из одного каталога в другой с помощью Shutil.copy().

shutil.copy()

Модуль Shutil Python предоставляет функцию Shutil.copy(), т.е.

Он копирует файл, указанный src, в каталог, указанный dst.

  • src — это путь к файлу в виде строки
  • dst может быть путем к каталогу или другому пути к файлу в виде строки.
  • Если src является путем символической ссылки,
    • Если для параметра follow_symlinks установлено значение True, будет скопирован файл, на который указывает символическая ссылка.
    • Если для параметра follow_symlinks задано значение False, создается новая аналогичная символическая ссылка в каталоге dst.
    • Возвращает строку пути к вновь созданному файлу.

    Давайте воспользуемся этой функцией для копирования файлов,

    Скопировать файл в другой каталог


    Он скопирует файл «sample1.txt» в каталог «/home/varung/test» и вернет путь к вновь созданному файлу, т.е.

    Некоторые важные моменты:

    • Если в целевом каталоге уже есть файл с таким именем, он будет перезаписан.
    • Если внутри /home/varung нет каталога с именем test, исходный файл будет скопирован внутри /home/varun с именем test.
    • Если путь назначения недействителен, т. е. какой-либо промежуточный каталог не существует, выдается ошибка, т. е.
      • FileNotFoundError: [Errno 2] Нет такого файла или каталога:

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


      Он скопирует файл sample1.txt в другое место с именем sample2.txt.

      Некоторые важные моменты:

      • Если целевой файл уже существует, он будет перезаписан.
      • Если путь назначения недействителен, т. е. какой-либо промежуточный каталог не существует, выдается ошибка, т. е.
        • FileNotFoundError: [Errno 2] Нет такого файла или каталога:

        Скопируйте символические ссылки с помощью Shutil.copy()

        Предположим, у нас есть символическая ссылка link.csv, которая указывает на sample.csv, т.е.

        Давайте скопируем символическую ссылку с помощью Shutil.copy(), т.е.

        По умолчанию для параметра follow_symlinks установлено значение True, т. е. целевой файл, на который указывает исходная ссылка, будет скопирован в директорию назначения.

        Содержимое newPath будет

        sample2.csv — это не ссылка, а реальная копия sample1.csv (файл, на который указывает link.csv)

        Если для параметра follow_symlinks установлено значение False, т. е.

        Он скопирует символическую ссылку, т. е. newlink.csv будет ссылкой, указывающей на тот же целевой файл sample1.csv, т. е.
        newlink.csv -> sample1.txt

        Если символическая ссылка не работает, т.е.целевой файл не существует, то выдается ошибка
        FileNotFoundError: [Errno 2] Нет такого файла или каталога

        Полный пример выглядит следующим образом

        Вывод:

        Учебники по Pandas – изучите анализ данных с помощью Python

        Вы хотите сделать карьеру в области Data Science с помощью Python?

        Наука о данных — это будущее, и оно уже наступило. На сегодняшний день специалисты по данным являются самыми востребованными профессионалами. Чтобы стать хорошим Data Scientist или сменить профессию в Data Science, нужно обладать нужным набором навыков. Мы составили список лучших профессиональных сертификатов в области науки о данных с помощью Python. Эти курсы научат вас инструментам программирования для науки о данных, таким как Pandas, NumPy, Matplotlib, Seaborn, и тому, как использовать эти библиотеки для реализации моделей машинного обучения.

        Ознакомьтесь с подробным обзором лучшего профессионального сертификата по науке о данных с Python.

        Помните, что наука о данных требует большого терпения, настойчивости и практики. Итак, начните учиться сегодня.

        Присоединяйтесь к сообществу разработчиков Python в LinkedIn

        Похожие записи

        Вставить элемент в начало массива NumPy

        Как добавить столбцы в массив NumPy в Python

        Как объединить массивы NumPy в Python?

        Добавить строку в массив NumPy в Python

        Добавить элементы в конец массива в Python

        Как удалить столбцы из массива NumPy

        Как удалить строки из массива NumPy

        Удалить последний элемент из массива NumPy в Python

        Удалить первый элемент из массива NumPy в Python

        Проверьте, является ли двумерный массив NumPy или матрица симметричным

        Редактировать значения ячеек в CSV-файлах с помощью Pandas в Python

        Сортировка массива NumPy в порядке убывания в Python

        Преобразование списка в набор в Python

        Добавление двух элементов списка в Python

        Добавление одного списка к другому списку в Python

        Удалить дубликаты из массива NumPy в Python

        Проверить, существует ли столбец в Pandas DataFrame

        Проверить, равны ли два массива NumPy в Python

        Pandas: проверьте, все ли значения в столбце равны нулю

        Проверить, все ли значения в столбце являются NaN в Pandas

        1 мысль о «Python: как копировать файлы из одного места в другое с помощью Shutil.copy()»

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

        Оставить комментарий Отменить ответ

        Этот сайт использует Akismet для уменьшения количества спама. Узнайте, как обрабатываются данные ваших комментариев.

        Реклама

        Реклама

        Последние публикации

        Учебники по Python

        Что-то ищу

        Учебники по C++/C++11

        Условия использования

        Условия и политика

        Учебники по Python

        Избранные сайты

        Отказ от ответственности

        Условия и политика

        Авторское право © 2022 thisPointer

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

        Техническое хранение или доступ необходимы для законных целей хранения настроек, которые не запрашиваются подписчиком или пользователем.

        Техническое хранилище или доступ, которые используются исключительно в статистических целях. Техническое хранилище или доступ, который используется исключительно для анонимных статистических целей. Без повестки в суд, добровольного согласия со стороны вашего интернет-провайдера или дополнительных записей от третьей стороны информация, хранящаяся или извлекаемая только для этой цели, обычно не может быть использована для вашей идентификации.

        Техническое хранилище или доступ необходимы для создания профилей пользователей для отправки рекламы или отслеживания пользователя на веб-сайте или на нескольких веб-сайтах в аналогичных маркетинговых целях.

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

        Техническое хранение или доступ необходимы для законных целей хранения настроек, которые не запрашиваются подписчиком или пользователем.

        Техническое хранилище или доступ, которые используются исключительно в статистических целях. Техническое хранилище или доступ, который используется исключительно для анонимных статистических целей.Без повестки в суд, добровольного согласия со стороны вашего интернет-провайдера или дополнительных записей от третьей стороны информация, хранящаяся или извлекаемая только для этой цели, обычно не может быть использована для вашей идентификации.

        Техническое хранилище или доступ необходимы для создания профилей пользователей для отправки рекламы или отслеживания пользователя на веб-сайте или на нескольких веб-сайтах в аналогичных маркетинговых целях.

        В наших предыдущих руководствах мы узнали о некоторых операциях с файлами Python, таких как чтение, запись и удаление. В этом руководстве мы научимся копировать файл в Python.

        Мы можем скопировать файл в Python, используя различные методы в нижеуказанных модулях,

        • модуль shutil
        • модуль операционной системы
        • модуль подпроцесса

        В этом руководстве мы научимся использовать различные методы, предоставляемые вышеуказанными модулями, для копирования файла в Python.

        1. Модуль Shutil для копирования файла в Python

        Модуль Shutil предоставляет несколько простых в использовании методов, с помощью которых мы можем удалить, а также скопировать файл в Python. Давайте рассмотрим различные методы, определенные в этом модуле, специально используемые для копирования.

        1. копировать файлobj()

        Метод copyfileobj() копирует содержимое исходного файла в целевой файл, используя соответствующие файловые объекты. Давайте посмотрим на код ниже,

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

        2. копировать файл()

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

        Следует помнить, что этот метод позволяет использовать только пути к файлам, а не каталоги.

        3. копировать()

        Этот метод копирует исходный файл в целевой файл или целевой каталог. В отличие от copyfile(), метод copy() позволяет использовать целевой каталог в качестве аргумента, а также копирует права доступа к файлу. copy() возвращает путь к целевому файлу после копирования содержимого.

        В целевом месте создается файл с именем «file.txt», при этом все содержимое и разрешения копируются из «/Users/test/file.txt».

        4. копировать2()

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

        2. Модуль os для копирования файла в Python

        1. открыть()

        Метод popen() создает канал для команды cmd. Метод возвращает файловый объект, подключенный к каналу cmd. Взгляните на код ниже,

        С помощью этого метода мы можем не только копировать файлы, но и выполнять другие обычные команды.

        2. система()

        Метод system() напрямую вызывает и выполняет аргумент команды в подоболочке. Его возвращаемое значение зависит от операционной системы, в которой запущена программа. Для Linux это статус выхода, тогда как для Windows это значение, возвращаемое системной оболочкой.

        3. Модуль подпроцесса для копирования файла в Python

        1. вызов()

        Метод call(), аналогичный os.system(), напрямую вызывает или выполняет команду, переданную функции в качестве аргумента.

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

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

        Быстрый ответ: используйте Shutil

        Оглавление

        Обзор методов Shutil Copy

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

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

        < td data-align="center">.copyfileobj()
        ФункцияВключить метаданные файлаТребуется место назначения файлаКопирует объект файла
        .copy() xx
        .copyfile() xxx
        .copy2() x
        xx

        В следующем разделе вы узнаете, как скопировать файл с помощью Python по определенному пути.

        Хотите узнать, как получить расширение файла в Python? В этом руководстве вы узнаете, как использовать библиотеки os и pathlib именно для этого!

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

        Метод Shutil.copyfile() копирует файл в другой путь к файлу назначения, а это означает, что нам нужно указать не только каталог назначения (папку), но также имя файла и расширение, которые мы хотим использовать. Это может быть очень полезно, если вы хотите переместить и переименовать копируемый файл.

        Давайте посмотрим, как мы можем использовать метод Shutil.copyfile() для копирования файла с помощью Python:

        • Пути к исходному и целевому файлам должны быть полными путями к файлам, а не просто каталогами.
        • Если файл уже существует в месте назначения, он будет заменен
        • Метаданные не будут скопированы

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

        Нужно автоматизировать переименование файлов? Ознакомьтесь с этим подробным руководством по использованию pathlib для переименования файлов. Более визуальное обучение, весь учебник также доступен в виде видео в посте!

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

        Если вы просто хотите скопировать файл в папку назначения, не указывая для него имя файла, вы можете использовать метод Shutil.copy(). Этот метод позволяет указать путь к файлу или каталогу назначения. Это может быть полезно, когда вы просто хотите скопировать несколько файлов в указанное место назначения.

        Давайте посмотрим, как мы можем скопировать файл в каталог с помощью Shutil.copy() :

        Некоторые дополнительные сведения, на которые следует обратить внимание:

        • Источником должен быть полный путь к файлу, а местом назначения может быть либо путь к файлу, либо путь к каталогу.
        • Если файл уже существует в месте назначения, он будет заменен
        • Метаданные не копируются

        В следующем разделе вы узнаете, как скопировать файл и сохранить метаданные с помощью Python.

        Хотите узнать больше об интерпретациях списков в Python? Ознакомьтесь с этим подробным руководством, которое охватывает все, что вам нужно знать, с практическими примерами. Посмотрите мой учебник на YouTube здесь.

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

        По умолчанию вышеуказанные методы не копируют метаданные данных. Это, например, может содержать дату создания. Если это важно, вы можете использовать метод Shutil.copy2().

        Давайте посмотрим, как мы можем это сделать:

        Давайте рассмотрим некоторые дополнительные примечания по этому методу:

        • Источником должен быть полный путь к файлу, а местом назначения может быть либо путь к файлу, либо каталог.
        • Метаданные будут сохранены
        • Если файл уже существует в месте назначения, он будет перезаписан

        В следующем разделе вы узнаете, как скопировать объект файла целиком с помощью Python.

        Скопировать файл с Python как файловый объект

        Вы также можете скопировать файл как файловый объект, используя метод Shutil.copyfileobj(). Этот метод вместо путей к файлам принимает файловые объекты в качестве аргументов.

        В связи с этим нам нужно сначала открыть файл, чтобы успешно скопировать его.

        Давайте посмотрим, как мы можем это сделать:

        Хотите узнать больше о циклах for Python? Ознакомьтесь с моим подробным руководством, которое превратит вас из новичка в продвинутого пользователя for-loops! Хотите вместо этого посмотреть видео? Посмотрите мое руководство на YouTube здесь.

        Заключение

        В этом посте вы узнали о четырех различных способах копирования файла в Python с помощью библиотеки Shutil. Зная преимущества и последствия различных подходов, вы сможете добиться желаемых результатов. Программное копирование файлов может быть невероятно полезным навыком для использования преимуществ программирования, особенно когда вы имеете дело с сотнями файлов.

        Чтобы узнать больше о библиотеке Shutil, ознакомьтесь с официальной документацией здесь.

        Читайте также: