2012-11-06 81 views
2

我希望建立一個移動的文件/目錄從一個目錄到另一個,而引用該債券複製的文件列表的Python腳本。用於移動目錄/文件的Python腳本,而忽略使用shutil的某些目錄/文件?

這裏是我迄今:

import os, shutil 

// Read in origin & destination from secrets.py Readlines() stores each line followed by a '/n' in a list 

    f = open('secrets.py', 'r') 
    paths = f.readlines() 

// Strip out those /n 

    srcPath = paths[0].rstrip('\n') 
    destPath = paths[1].rstrip('\n') 

// Close stream 

    f.close() 

// Empty destPath 

    for root, dirs, files in os.walk(destPath, topdown=False): 
     for name in files: 
      os.remove(os.path.join(root, name)) 
     for name in dirs: 
      os.rmdir(os.path.join(root, name)) 

// Copy & move files into destination path 

    for srcDir, dirs, files in os.walk(srcPath): 
     destDir = srcDir.replace(srcPath, destPath) 
     if not os.path.exists(destDir): 
      os.mkdir(destDir) 
     for file in files: 
      srcFile = os.path.join(srcDir, file) 
      destFile = os.path.join(destDir, file) 
      if os.path.exists(destFile): 
       os.remove(destFile) 
      shutil.copy(srcFile, destDir) 

的secrets.py文件包含源/目標路徑。

目前該傳輸的所有文件/目錄了。我想閱讀另一個文件,該文件允許您指定要傳輸的文件(而不是製作「忽略」列表)。

+0

有使用'tar'或'rsync'做到這一點考慮?它們允許您指定包含要包含或排除的文件列表的文件。 –

回答

1

你應該閱讀文件列表

f = open('secrets.py', 'r') 
paths = f.readlines() 

f_list = open("filelist.txt", "r") 
file_list = map(lambda x: x.rstrip('\n'), f_list.readlines()) 

.... 
.... 

,如果你的文件列表中包含文件名的模式複製

for file in files: 
     if file in file_list# <--- this is the condition you need to add to your code 
      srcFile = os.path.join(srcDir, file) 
     .... 

前檢查,以使用「重新」蟒蛇的模塊來匹配被複制的嘗試你的文件名。

+0

太棒了,這對我的根目錄中的文件非常適用,我怎樣才能選擇要傳輸的目錄呢? – Karoh

+0

目前所有的目錄都被轉移。 – Karoh

+0

你能舉個例子嗎?因爲如果你說你想複製dir1和file1,但是如果file1存在於dir2中,並且如果你不復制/創建dir2,那麼file1也不會被複制。 – kalyan

相關問題