2016-11-23 2 views
0

Я новичок в использовании Spyder 2.3.0 и Python 3.4.1Как я могу скопировать различные типы файлов в Python, сохраняя при этом своей структуре каталогов

У меня есть структура каталогов с подкаталогами.

В отличие от других примеров в Интернете, я хочу выбрать несколько типов файлов и скопировать структуру каталогов. Я пробовал ниже, и он работает, но он принимает только один тип файла за раз, а «copytree« поперек »(это будет очень медленно).

Есть ли способ или другой способ упростить это, чтобы сделать его быстрее?

То, что я думал, что я хотел сделать, это:

Сделать полный список типов файлов и местоположений (ходьба через структуру каталогов)

Например заканчивая

fileExt = [".txt", ".doc", ".docx", ".xls",".xlsx", ".ppt", ".pptx", ".m", ".xmcd", ".pdf " ] 

Тогда с что список просто «shutil.copytree»

Любой совет, который получил высокую оценку.

srcDir = 'c:/a/src/dir/' 
    dirName = 'c:/a/dest/dir/' 


import os 
import shutil 

################################################################################## 

dstDir = os.path.abspath(dirName) 

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('.txt') : 

      filesToIgnore.append(fileName) 

    return filesToIgnore 

# start of script 

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

dstDir = os.path.abspath(dirName) 

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('.docx') : 


      filesToIgnore.append(fileName) 

    return filesToIgnore 

# start of script 

shutil.copytree(srcDir, dstDir, ignore=ignore_list) 

#################################################### 

Скопируйте и вставьте изменения «EndsWith ('DOCX.):»

+0

возможно, fnmatch помогает. Пожалуйста, смотрите здесь: https://docs.python.org/2/library/fnmatch.html – Humbalan

ответ

0

мы можем выполнить ваш "ignore_list" метод немного более

valid_formats = ["txt", "doc", "docx", "xls","xlsx", "ppt", "pptx", "m", "xmcd", "pdf "] 

import timeit 
import os.path as op 

def ignore_list(path, files): 
    dag_path = [op.join(op.normpath(path), f) for f in files] 
    return [ff for ff in dag_path if not op.isdir(ff) and ff.split(".")[-1] not in valid_formats] 

start = timeit.default_timer() 
ignore = ignore_list(path, files) 
print ("Time: {0}".format(str(timeit.default_timer()-start))) 
+0

Я очень новичок в программировании (35-летний инженер-механик), как и в моем рабочем примере, у меня есть: srcDir = 'c :/a/src/dir/' dirName =' c:/a/dest/dir/' Не могли бы вы дать мне полный пример, который я мог бы использовать. Мне нравится «valid_formats» идеей Благодаря – Lost1e

+0

в "игнорирующие = ignore_list (путь, файлы)" хранит вырвет ошибку в Spyder – Lost1e

+0

заменить в ignore_list ... dag_path = [(op.join (op.normpath (путь), f)) для f в файлах],() отсутствует, sry –

0

Это работает, я знаю его не очень, но он работает

srcDir = 'c:/a/src/dir/ 
dstDir = 'c:/a/dest/dir/' 


A01= '.doc' 
A02= '.docx' 
A03= '.xls' 
A04= '.xlsx' 
A05= '.ppt' 
A06= '.pptx' 
A07= '.m' 
A08= '.xmcd' 
A09= '.inp' 
A10= '.pdf' 
A11= '.DOC' 
A12= '.DOCX' 
A13= '.XLS' 
A14= '.XLSX' 
A15= '.PPT' 
A16= '.PPTX' 
A17= '.M' 
A18= '.XMCD' 
A19= '.INP' 
A20= '.PDF' 



import os 
import shutil 

######################################################################################################### 


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(A01) and not fileName.endswith(A02) and not fileName.endswith(A03) and not fileName.endswith(A04) and not fileName.endswith(A05) and not fileName.endswith(A06) and not fileName.endswith(A07) and not fileName.endswith(A08) and not fileName.endswith(A09) and not fileName.endswith(A10) and not fileName.endswith(A11) and not fileName.endswith(A12) and not fileName.endswith(A13) and not fileName.endswith(A14) and not fileName.endswith(A15) and not fileName.endswith(A16) and not fileName.endswith(A17) and not fileName.endswith(A18) and not fileName.endswith(A19) and not fileName.endswith(A20) : 


      filesToIgnore.append(fileName) 

    return filesToIgnore 




shutil.copytree(srcDir, dstDir, ignore=ignore_list) 

######################################################################################################### 

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

  • Нет связанных вопросов^_^