HiveBrain v1.2.0
Get Started
← Back to all entries
patternpythonMinor

Copy a directory structure to another, but only copying specific files

Submitted by: @import:stackexchange-codereview··
0
Viewed 0 times
directorybutfilescopyinganotherstructurespecificonlycopy

Problem

script.py:

#!/usr/bin/python

import os

srcDir = os.getcwd()

dirName = 'target_directory'

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('pyc')
            and not fileName.endswith('ui')
            and not fileName.endswith('txt')
            and not fileName == '__main__.py'
            and not fileName == 'dcpp.bat'):

            filesToIgnore.append(fileName)

    return filesToIgnore

# start of script

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


As shutil.copytree() has no option where I can give names for required files to copy like "ignore," I have modified the argument of ignore to give "required files to copy."

Review my code.

Solution

Looks ok for a specific task, but the code is not reusable at all. It would be more useful to create a function ignore_except that could be used like this to perform the same task:

shutil.copytree(srcDir, dstDir, 
                ignore=ignore_except('*.pyc', '*.ui', '*.txt', '__main__.py', 'dcpp.bat'))


The source code of shutil.ignore_patterns would be a good starting point for such function.

Code Snippets

shutil.copytree(srcDir, dstDir, 
                ignore=ignore_except('*.pyc', '*.ui', '*.txt', '__main__.py', 'dcpp.bat'))

Context

StackExchange Code Review Q#42123, answer score: 3

Revisions (0)

No revisions yet.