蟒蛇。 IOError:[Errno 13]权限被拒绝:当我正在复制文件时

时间:2011-09-22 16:16:01

标签: python windows windows-7

我有两个文件夹: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'

有什么问题?

9 个答案:

答案 0 :(得分:52)

阅读docs

  

shutil.copyfile(src, dst)

     

将名为 src 的文件的内容(无元数据)复制到文件中   命名为 dst dst 必须是完整的目标文件名;看copy()   对于接受目标目录路径的副本。

答案 1 :(得分:11)

使用 shutil.copy而不是shutil.copyfile

示例:

shutil.copy(PathOf_SourceFileName.extension,TargetFolderPath)

答案 2 :(得分:1)

我解决了这个问题,您应该是目的地的完整目标文件名

目的地=路径目录+文件名。*

我将这段代码fir复制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)

答案 3 :(得分:0)

使用 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

答案 4 :(得分:0)

使用

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

用于src和dst:

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

答案 5 :(得分:0)

首先,请确保您的文件没有被Windows锁定,某些应用程序(例如MS Office)会锁定被锁定的文件。

当我尝试重命名目录中的长文件列表时出现错误13,但是Python尝试重命名与文件相同路径的某些文件夹。因此,如果您不使用Shutil库,请检查它是目录还是文件!

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!")

答案 6 :(得分:0)

这对我有用:

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

答案 7 :(得分:0)

确保您没有进入(锁定)任何试图使用shutil.copy的文件。

这应该有助于解决您的问题

答案 8 :(得分:-2)

对于Python 3.6的新观众来说,这个问题已经过时了 使用

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

而不是

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

r参数用于读取文件而不是复制