2014-02-19 4 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 этой строки, так что я должен проверить условие «если» со списком (содержащий * .pyc, *. Txt, * .ui, __main__ .py, myfile.txt) – Patrick

ответ

1

Что я мог понять из вашего вопроса, вы могли бы просто написать:

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

где fileNameList список имен файлов, которые вы хотите скопировать.

Update:

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

Смежные вопросы