Подтвердить что ты не робот

Python. IOError: [Errno 13] Permission denied: когда я копирую файл

У меня есть две папки: In, Out - это не системная папка на диске D: - Windows 7. Out содержат "myfile.txt". Я запускаю следующую команду в python:

>>> shutil.copyfile( r"d:\Out\myfile.txt", r"D:\In" )

Traceback (most recent call last):
  File "<pyshell#39>", line 1, in <module>
    shutil.copyfile( r"d:\Out\myfile.txt", r"D:\In" )
  File "C:\Python27\lib\shutil.py", line 82, in copyfile
    with open(dst, 'wb') as fdst:
IOError: [Errno 13] Permission denied: 'D:\\In'

В чем проблема?

4b9b3361

Ответ 1

Прочитайте docs:

shutil.copyfile(src, dst)

Скопировать содержимое (без метаданных) файла с именем src в файл имя dst. dst должно быть полным именем целевого файла; посмотрите copy()для копии, которая принимает целевой путь к каталогу.

Ответ 2

использование shutil.copy вместо shutil.copyfile

Пример:

shutil.copy(PathOf_SourceFileName.extension,TargetFolderPath)

Ответ 3

Я решил эту проблему, вы должны быть полное имя файла назначения для назначения

destination = pathdirectory + filename. *

Я использую этот код для копирования wav файла с shutil:

    # open file with QFileDialog

    browse_file = QFileDialog.getOpenFileName(None, 'Open file', 'c:', "wav files (*.wav)")

    # get file name 

    base = os.path.basename(browse_file[0])
    os.path.splitext(base)
    print(os.path.splitext(base)[1])

    # make destination path with file name

    destination= "test/" + os.path.splitext(base)[0] + os.path.splitext(base)[1]
    shutil.copyfile(browse_file[0], destination)

Ответ 4

Используйте shutil.copy2 вместо shutil.copyfile

import shutil 
shutil.copy2('/src/dir/file.ext','/dst/dir/newname.ext') # file copy to another file
shutil.copy2('/src/file.ext', '/dst/dir') # file copy to diff directory

Ответ 5

использование

> from shutil import copyfile
> 
> copyfile(src, dst)

для использования в src и dst:

srcname = os.path.join(src, name)
dstname = os.path.join(dst, name)

Ответ 6

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

import os
path="abc.txt"

if os.path.isfile(path):
    #do yor copy here
    print("\nIt is a normal file") 

Или

if os.path.isdir(path):
    print("It is a directory!")
else:
    #do yor copy here
    print("It is a file!")

Ответ 7

Это работает для меня:

import os
import shutil
import random


dir = r'E:/up/2000_img'
output_dir = r'E:/train_test_split/out_dir'


files = [file for file in os.listdir(dir) if os.path.isfile(os.path.join(dir, file))]

if len(files) < 200:
    # for file in files:
    #     shutil.copyfile(os.path.join(dir, file), dst)
    pass
else:
    # Amount of random files you'd like to select
    random_amount = 10
    for x in range(random_amount):
        if len(files) == 0:
            break
        else:
            file = random.choice(files)
            shutil.copyfile(os.path.join(dir, file), os.path.join(output_dir, file))

Ответ 8

хорошо старый вопрос, для нового зрителя Python 3.6 используйте

shutil.copyfile( "D:\Out\myfile.txt", "D:\In" )

вместо

shutil.copyfile( r"d:\Out\myfile.txt", r"D:\In" )

r передается аргумент для чтения файла не для копирования