2015-02-24 37 views
1

我想寫一個python腳本,將某些文件從源文件夾複製到目標,但只應複製新創建的文件。 例如,源文件夾包含2005文件,目標文件夾包含2000個文件,我的腳本應該複製5個丟失的文件Python - 如何只複製新的修改後的文件

在下面的腳本中,邏輯是記錄擴展名爲「 。擴展名」,並試圖得到它,它在下一步

import sys, os, shutil 
import glob 
import os.path, time 

fob  = open(r"C:\Python\Log.txt","a") 
dir_src = r"C:\Python\Source" 
dir_dst = r"C:\Python\Dest" 

for w in os.listdir(dir_src): 
    if w.endswith('.extenstion'): 
     pathname = os.path.join(dir_src, w) 
     if not Date_File in (fob): 
      shutil.copy2(pathname, dir_dst) 
      fob.write("File Name: %s" % os.path.basename(pathname)) 
      fob.write(" Last modified Date: %s" % time.ctime(os.path.getmtime(pathname))) 
      fob.write(" Copied On: %s" % time.strftime("%c")) 
      fob.write("\n")     
fob.close() 
os.system("PAUSE") 

比較我無法找到一個方法來比較的日期和檢查是一個文件應該被複制或沒有。

歡迎任何其他方法。

+1

看看['filecmp'](https://docs.python.org/2/library/filecmp.html) – 2015-02-24 14:01:21

+0

爲什麼日期很重要? – 2015-02-24 14:05:56

回答

1

通過執行list(set(os.listdir(dir_src)) - set(os.listdir(dir_dst)))並重復此列表,您應該能夠從源文件夾中刪除目標文件夾的已有文件。

+0

你可以遍歷一個集合。 – 2015-02-24 14:04:50

1

雖然您的比較文件可以工作,但我認爲在這種情況下,更好的方法是比較兩個文件的getmtime值。由於這兩個文件在源目錄和目標目錄中都有相同的名稱,因此可以簡單地在目標目錄中對相同的文件名執行getmtime查找。

如果文件不存在,您應該得到一個os.error,這意味着您必須複製該文件。

如果目標目錄中的文件早於源目錄中的文件(如此getmtime(src_file) > getmtime(dest_file))被修改,那麼您也應該複製它。

如果你願意,你當然可以記錄下來。你也可以放棄整個過程並使用rsync或其他東西。

0

除了這個邏輯之外,你可以做什麼, 你可以找到源路徑和目的路徑中的文件的時代(使用os.path.getmtime()方法),並比較它們。如果源路徑中的文件對上次修改時間具有更大的時元值,則可以將其複製到目標路徑中。

相關問題