Я ищу в Интернете, но не получаю
если мой исходный и конечный путь существуют, скопируйте только исходный файл: abc.csv до пути назначения
import shutil
shutil.copyfile("/demo/abc.csv" "/dummy/")
Если путь назначения не существует, он создается, я не хочу, чтобы это произошло
если оба пути существуют, скопируйте abc.csv только с одного пути на другой путь
Вы можете использовать os.path.isdir()
, чтобы проверить, существует ли каталог.
destination_dir = ""
file_name = ""
if os.path.isdir(destination_dir):
try:
path = os.path.join(destination_dir, file_name)
shutil.copyfile("/demo/abc.csv", path)
except:
# handle error
Shutil.copyfile() вызывает IsADirectoryError, если целью является каталог
Разве вы не предпочли бы os.path.join() для надежного построения цели? Если target_dir не заканчивается соответствующим разделителем каталогов, это не сработает.
@LancelotduLac достаточно честно, добавил блок try/except
Моя интерпретация этого вопроса заключается в том, что источником является файл, а целью является каталог, и, кроме того, копировать следует только в том случае, если источник существует (как обычный файл) и цель существует (как каталог). Если это так, то:
import os
import shutil
def safe_copy(source_file, target_directory):
if os.path.isfile(source_file) and os.path.isdir(target_directory):
shutil.copyfile(source_file, os.path.join(target_directory, os.path.basename(source_file)))
Учитывая исходный файл /home/test.txt и целевой каталог /foo, тогда, если /home/test.txt существует и /foo является существующим каталогом, будет выполнено копирование (если разрешено), что приведет к /foo/test.txt либо создается, либо перезаписывается
Взгляните на os.path.* для некоторых полезных служебных функций.