2014-02-19 62 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