最近在學python遇到了些問題..
程式如下:
#shutil模組
import os,shutil
cur_path=os.path.dirname(__file__)
if shutil.copyfile(cur_path+'\SQL2.py' , 'abc.py'):
print("success")
if shutil.copy(cur_path , "cba"):
print("success")
copyfile是有辦法執行的,但下面的copy就會出現
PermissionError: [Errno 13] Permission denied: 'd:\python\ch4'
網路上查到的解決辦法是把取消唯獨
所以把上面那個唯獨取消掉
但再次查看的時候,那個唯獨又被勾上了
也試過用cmd輸入attrib -r D:\python也沒有用
所以想問要怎麼解決?
你確定你路徑可以那樣子寫嗎?
我建議你試著把 cur_path
印出來看一下裡面有什麼東西...
以下附上完整範例(注意:你寫了兩個複製的動作):
# 引入os模組,提供了許多與作業系統互動的功能
import os
# 引入shutil模組,提供了許多檔案操作的功能
import shutil
# 獲取當前檔案(__file__)的路徑
cur_path = os.path.dirname(__file__)
# 使用os.path.join函數,將路徑與檔名結合,獲取來源檔案(a.txt)的完整路徑
src_file = os.path.join(cur_path, 'a.txt')
# 使用os.path.join函數,將路徑與檔名結合,獲取目標檔案(b.txt)的完整路徑
dst_file = os.path.join(cur_path, 'b.txt')
# 使用shutil.copyfile函數,將來源檔案複製到目標檔案
# 如果複製成功,則會返回目標檔案的路徑
if shutil.copyfile(src_file, dst_file):
print("success")
# 使用shutil.copy函數,將來源檔案複製到目標檔案
# 此函數除了複製檔案內容外,還會嘗試複製檔案的權限等信息
# 如果複製成功,則會返回目標檔案的路徑
if shutil.copy(src_file, dst_file):
print("success")
執行結果
參考以下資訊,應該是你的 cur_path
是一個資料夾路徑 d:\python\ch4
,而不是檔案路徑
shutil.copy(src, dst, *, follow_symlinks=True)
将文件 src 拷贝到文件或目录 dst。 src 和 dst 应为 路径类对象 或字符串。 如果 dst 指定了一个目录,文件将使用 src 中的基准文件名拷贝到 dst 中。 如果 dst 指定了一个已存在的文件,它将被替换。 返回新创建文件所对应的路径。
src 為檔案路徑,而不是資料夾路徑
# 用copy复制文件:src是文件路径,dst可以是文件或目录
shutil.copy("J:\\src_path\\test.txt","J:\\dst_path\\")
參考:
shutil --- 高阶文件操作
解决shutil.copyfile常见错误:PermissionError: [Errno 13] Permission denied
Why would shutil.copy() raise a permission exception when cp doesn't?