How to copy a file to a specific folder in a Python script? [duplicate]

杀马特。学长 韩版系。学妹 提交于 2019-12-23 08:07:54

问题


I have the path of a file stored in a variable (say) filePath. I would like to copy that particular file to another specific folder within a Python script.

I tried

folderPath = (os.getcwd() + "/folder_name/") #to get the path of the folder
shutil.copyfile(filePath, folderPath)

But I got an error IOError: [Errno 21] Is a directory.

How can I solve this ?

My question might seem to be a duplicate of How do I copy a file in python? . But actually, I want to copy a file to a folder/directory whereas most answers to that question mention copying one file to another file.


回答1:


Use shutil.copy(filePath, folderPath) instead of shutil.copyfile(). This will allow you to specify a folder as the destination and copies the file including permissions.

shutil.copy(src, dst, *, follow_symlinks=True):

Copies the file src to the file or directory dst. src and dst should be strings. If dst specifies a directory, the file will be copied into dst using the base filename from src. Returns the path to the newly created file.

...

copy() copies the file data and the file’s permission mode (see os.chmod()). Other metadata, like the file’s creation and modification times, is not preserved. To preserve all file metadata from the original, use copy2() instead.

https://docs.python.org/3/library/shutil.html#shutil.copy

See the difference in copying also documented in shutil.copyfile() itself:

shutil.copyfile(src, dst, *, follow_symlinks=True):

Copy the contents (no metadata) of the file named src to a file named dst and return dst. src and dst are path names given as strings. dst must be the complete target file name; look at shutil.copy() for a copy that accepts a target directory path. If src and dst specify the same file, SameFileError is raised.

https://docs.python.org/3/library/shutil.html#shutil.copyfile




回答2:


folderpath must be a file, not a directory. The error says it all. Do something like:

shutil.copyfile(filePath, folderPath+'/file_copy.extension')



回答3:


Change your code as below:

folderPath = os.path.join('folder_name', os.path.basename(filePath))
shutil.copyfile(filePath, folderPath)


来源:https://stackoverflow.com/questions/45126572/how-to-copy-a-file-to-a-specific-folder-in-a-python-script

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!