5

I have a folder with a few files that I would like to copy one directory up (this folder also has some files that I don't want to copy). I know there is the os.chdir("..") command to move me to the directory. However, I'm not sure how to copy those files I need into this directory. Any help would be greatly appreciated.


UPDATE:

This is what I have now:

from shutil import copytree, ignore_patterns

copytree("/Users/aaron/Desktop/test/", "/Users/aaron/Desktop/", ignore=ignore_patterns('*.py', '*.txt'))

I am getting the following error:

Traceback (most recent call last):
  File "update.py", line 61, in <module>
    copytree("/Users/aaron/Desktop/test/", "/Users/aaron/Desktop/", ignore=ignore_patterns('*.py', '*.txt'))
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/shutil.py", line 146, in copytree
    os.makedirs(dst)
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/os.py", line 157, in makedirs
    mkdir(name, mode)
OSError: [Errno 17] File exists: '/Users/aaron/Desktop/'
1

1 Answer 1

9

The shutil module can do this, specifically the copyfile, copy, copy2 and copytree functions. http://docs.python.org/library/shutil.html

You probably want something along these lines:

import os
import shutil

fileList = os.listdir('path/to/source_dir')
fileList = ['path/to/source_dir/'+filename for filename in fileList]

for f in fileList:
    shutil.copy2(f, 'path/to/dest_dir/')

You can of course filter some file names out during the call to os.listdir(). For example,

fileList = [filename for filename in os.listdir('path/to/source_dir') if filename[-3] is '.txt']

instead of fileList = os.listdir('path/to/source_dir') to get just the .txt files

Sign up to request clarification or add additional context in comments.

5 Comments

I took your advice and tried using copytree. For some reason, I'm getting an error when I try to run it. Please see what I added under my question. Thank you,Aaron
copytree requires that the destination directory not already exist.
For the example you gave, would I need to do this for each filename? I see on line 5 you add the filename. Since I have 5 files that need to be copied how would that work.
Yes, this will work for any number of files... That's what the for loops are for...
Ok, so all I need to do is input the path to the source dir and destination. And it will pull all the files in the source directory?

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.