2014-02-19 61 views
1
def ignore_list(path, files): 
    filesToIgnore = [] 
    for fileName in files: 
     fullFileName = os.path.join(os.path.normpath(path), fileName) 
     if not os.path.isdir(fullFileName) and not fileName.endswith('pyc') and not fileName.endswith('ui') and not fileName.endswith('txt') and not fileName == '__main__.py' and not fileName == 'myfile.bat': 
      filesToIgnore.append(fileName) 

    return filesToIgnore 

# Start of script  
shutil.copytree(srcDir, dstDir, ignore=ignore_list) 

我想更改包含要複製的文件的if行。在這裏,我必須分別給出文件名,但是我想改變它,就像它應該從包含所有文件名的列表中獲取文件名一樣。遞歸複製文件

我該怎麼做?

+1

文件名列表是怎麼樣的?如果它是要忽略的文件列表,爲什麼不通過'ignore ='傳遞它呢? – Bach

+0

如果我得到這個正確的你的方法ignore_list應該通過路徑目錄運行並尋找匹配你的if文件,並返回不應複製的文件列表? – flazzarini

+0

我想要複製的文件在「if」行中,我只是想把這一行chage,這樣我應該檢查「if」條件與列表(包含* .pyc,*。txt,* .ui,__main__ .py,myfile.txt) – Patrick

回答

1

我能理解什麼從你的問題是,你可以簡單地寫:

if fileName not in fileNameList: 
    filesToIgnore.append(fileName) 

其中fileNameList是要複製的文件名列表。

更新:

fName, fileExtension = os.path.splitext(fileName) 
if fileName not in fileNameList or fileExtension not in allowedExtensionList: 
    filesToIgnore.append(fileName) 
+0

可以給我一個代碼中的「if」行代替你的方法,因爲它包含* .pyc,* .ui,* .txt和__main__.py,myfile.txt – Patrick

+0

If您在列表中提供了文件的完整名稱(帶有擴展名),則不需要檢查文件擴展名。只要把允許/可接受的文件。 –

+0

有很多.pyc,.ui和.txt文件,所以我不能給出所有文件的全名 – Patrick

0

你也可以寫類似下面的方法。

def ignore_files(path, extensions, wantedfiles): 
     ignores = [] 

     for root, dirs, filenames in os.walk(path): 
      for filename in filenames: 
      if any(filename.endswith(_) for _ in extensions): 
        ignores.append(os.path.join(os.path.normpath(path), filename)) 
      elif filename in wantedfiles: 
        ignores.append(os.path.join(os.path.normpath(path), filename)) 

     return ignores 

# Start of script 
ignore_list = ignore_files(srcDir, ['pyc', 'uid', 'txt']) 
shutil.copytree(srcDir, dstDir, ignore=ignore_list) 
+0

如何在您的答案代碼中包含複製文件特定文件的條件 – Patrick

+0

我已經更新了代碼,甚至應該包含特定的文件,如您的示例中的「main.py」,您只需要將它們放在單獨的列表中 – flazzarini

+0

shutil.copytree(srcDir,dstDir,ignore = ignore_list) - 這行給我錯誤TypeError:'list'對象不可調用 – Patrick