2017-07-16 539 views
0

我有我使用所有的JPG文件移動從源頭到目的地的代碼。第一次代碼運行正常,它移動文件,但如果我再次運行它,它會給出文件已存在的錯誤。shutil.move如果目錄已經存在

Traceback (most recent call last): 
    File "/Users/tom/Downloads/direc.py", line 16, in <module> 
    shutil.move(jpg, dst_pics) 
    File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/shutil.py", line 542, in move 
    raise Error("Destination path '%s' already exists" % real_dst) 
shutil.Error: Destination path '/Users/tom/Downloads/Dest/Pictures/Photo3.jpg' already exists 

這裏是我的代碼

import os 
import glob 
import shutil 

local_src = '/Users/tom/Downloads/' 
destination = 'Dest' 

src = local_src + destination 
dst_pics = src + '/Pictures/' 

print(dst_pics) 

for pic in glob.iglob(os.path.join(src, "*.jpg")): 
    if os.path.isfile(pic): 
     if not (os.path.isfile(dst_pics + pic)): 
      shutil.move(pic, dst_pics) 
     else: 
      print("File exists") 

有什麼我可以做,因此它可以覆蓋該文件或檢查是否存在該文件,並跳過它?

我能夠通過以下@Justas溶液G來解決它。

下面是解

for pic in glob.iglob(os.path.join(src, "*.jpg")): 
    if os.path.isfile(pic): 
     shutil.copy2(pic, dst_pics) 
     os.remove(pic) 
+0

我已經試過了解決方案,但它沒有工作。即使使用完整路徑後,它也不會覆蓋該文件。 –

+0

你嘗試做一個'如果os.path.exists(DIR):'檢查,然後'shutil.rmtree(DIR)'如果它的存在?此時你應該可以寫入該路徑。您可以使用pathlib模塊執行類似的操作。 – idjaw

回答

1

使用複印insted的舉動,它應該覆蓋文件自動

shutil.copy(sourcePath, destinationPath)

然後,當然,你需要刪除原始文件。請注意,shutil.copy不會複製或創建目錄,因此您需要確保它們存在。

如果這也不行,你可以手動檢查文件是否存在,將其刪除,並移動新文件:

要檢查文件是否存在,用途:

from pathlib import Path my_file = Path("/path/to/file")

if my_file.exists():到檢查的東西在路徑存在

if my_file.is_dir():檢查,如果目錄存在

if my_file.is_file():檢查文件是否存在

與它的所有內容刪除目錄使用: shutil.rmtree(path)

或刪除一個文件, os.remove(path)再往前逐一

+0

我能夠按照您的指示解決問題。看到我上面的編輯。 –

+0

樂意幫助^^ –

相關問題