file_util
# MODULE
# file_util
# PURPOSE
# Utility functions for manipulating files and paths
#*** --------------------------------------------------------------
import os
from os.path import *
relative_path
# FUNCTION
# relative_path(path1,path2)
# PURPOSE
# Generates relative path of path2 relative to path1.
# ARGUMENTS
# path1 and path2 are paths relative to a common directory
# RETURN
# Path for file2 relative to directory containing path1
#*** ---------------------------------------------------------------
def relative_path(path1,path2):
root = commonprefix([path1,path2])
root = dirname(root)
if (root == '/'):
raise 'Error in relative_path - common directory cannot be / '
if root :
path2 = path2[len(root)+1:]
path1 = dirname(path1)
while not ( root == path1 ):
path2 = '../' + path2
path1 = dirname(path1)
return path2
chdirs
# FUNCTION
# chdirs(dir)
# PURPOSE
# Change current working directory to dir (like os.chdir), and
# create dir and any necessary parents if it does not yet exist.
#*** --------------------------------------------------------------
def chdirs(dir):
if not exists(dir):
print 'Creating directory ' + dir
os.makedirs(dir)
os.chdir(dir)
open_w
# FUNCTION
# open_w(path)
# PURPOSE
# Open file with specified path for writing, return file object.
# Similar to built-in function open(path,'w'), except that open_w
# will create any non-existent directories in the path.
# RETURN
# file object with specified path, opened for writing
#*** --------------------------------------------------------------
def open_w(path):
dir = dirname(path)
if dir:
if not exists(dir):
print 'Creating directory ' + dir
os.makedirs(dir)
return open(path,'w')
rename
# FUNCTION
# rename(old_path,new_path)
# ARGUMENTS
# old_path - path of file or directory to be
# PURPOSE
# Rename a file or directory. Similar to os.rename,but will
# create any non-existent directories in the path
# RETURN
# file object with specified path, opened for writing
#*** --------------------------------------------------------------
def rename(old_path,new_path):
if (not isfile(old_path)) and (not isdir(old_path) ):
print 'Path ' + old_path + ' is not a file or directory'
return
new_dir = dirname(new_path)
if new_dir:
if not exists(new_dir):
print 'Creating directory ' + new_dir
os.makedirs(new_dir)
return os.rename(old_path,new_path)