Here are a few basic fuctions that allow someone to copy a directory (along with its files and sub-directories) and paste it somewhere else. They ignore links and anything else that is not a directory or a file. The data returned from copy_dir() is in a format that paste_dir() can understand. A design note: what you get back from copy_dir() may be different whether or not you have a path separator at the end of the path; paste_dir() makes use of that feature (whether or not you want the first folder to be created). The fuctions can easily be modified to not include sub-directories in the returned package, and errors caused by accessing to files or directories can also be ignored with some simple editting. Also, note the asserts in the functions; these functions are designed to crash hard so that the calling code has to take care of the errors.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
'''cap_module.py The purpose of this module is to provide functions for copying and pasting directories and files. This is a level 1 module.''' #========================= # Level 1 Functions: Files #========================= def copy_file(path): '''copy_file(string) Import the needed functions. Assert that the path is a file. Return all file data.''' from os.path import basename, isfile assert isfile(path) return (basename(path), file(path, 'rb', 0).read()) def paste_file(file_object, path): '''paste_file(tuple, string) Import needed functions. Assert that the path is a directory. Create all file data.''' from os.path import isdir, join assert isdir(path) file(join(path, file_object), 'wb', 0).write(file_object) #=============================== # Level 2 Functions: Directories #=============================== def copy_dir(path): '''copy_dir(string) Import needed functions. Assert that path is a directory. Setup a storage area. Write all data to the storage area. Return the storage area.''' from os import listdir from os.path import basename, isdir, isfile, join assert isdir(path) dir = (basename(path), list()) for name in listdir(path): next_path = join(path, name) if isdir(next_path): dir.append(copy_dir(next_path)) elif isfile(next_path): dir.append(copy_file(next_path)) return dir def paste_dir(dir_object, path): '''paste_dir(tuple, string) Import needed functions. Assert that the path is a directory. Edit the path and create a directory as needed. Create all directories and files as needed.''' from os import mkdir from os.path import isdir, join assert isdir(path) if dir_object is not '': path = join(path, dir_object) mkdir(path) for object in dir_object: if type(object) is list: paste_dir(object, path) else: paste_file(object, path) #================ # CGI: Print File #================ if __name__ == '__main__': from sys import argv print 'Content-type: text/plain' print print file(argv).read()
Want to capture a directory with its contents? Then this code is for you. Otherwise, maybe you can invent some other uses for it ...
Function(s) Requested. Does anyone know of a standard format for printing directories, their files, their sub-directories, etc? That is the main this that this module is lacking. Is does not have any functions for displaying the contents of a "real" directory or a "packaged" directory. If there was a standard format, I would love to write the code for it or see the code that someone else might write for this purpose. It is annoying when you have a package and cannot (at a glance) see what its contents are. Example: someone doesn't want to paste a package for some specific reason that could easily be identified if they could only look at what the package contained.
path.py. How about http://www.jorendorff.com/articles/python/path/path.py
Where is the function? I was looking for a function that would print out the list of files, sub-directories, etc. but could not find it. Do you know what the name of the of function is? All I'm looking for is some inspiration as to how someone would want to view a print-out of this information.
Walk? Depends on how you would like to format it. walk() will do "depth-first":