我有两个文件夹: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'
有什么问题?
答案 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)
shutil.copyfile( "D:\Out\myfile.txt", "D:\In" )
而不是
shutil.copyfile( r"d:\Out\myfile.txt", r"D:\In" )
传递 r
参数用于读取文件而不是复制