|
"""Collection of utilities for command-line interfaces and console scripts.""" |
|
import os |
|
import re |
|
|
|
|
|
numberAddedRE = re.compile(r"#\d+$") |
|
|
|
|
|
def makeOutputFileName( |
|
input, outputDir=None, extension=None, overWrite=False, suffix="" |
|
): |
|
"""Generates a suitable file name for writing output. |
|
|
|
Often tools will want to take a file, do some kind of transformation to it, |
|
and write it out again. This function determines an appropriate name for the |
|
output file, through one or more of the following steps: |
|
|
|
- changing the output directory |
|
- appending suffix before file extension |
|
- replacing the file extension |
|
- suffixing the filename with a number (``#1``, ``#2``, etc.) to avoid |
|
overwriting an existing file. |
|
|
|
Args: |
|
input: Name of input file. |
|
outputDir: Optionally, a new directory to write the file into. |
|
suffix: Optionally, a string suffix is appended to file name before |
|
the extension. |
|
extension: Optionally, a replacement for the current file extension. |
|
overWrite: Overwriting an existing file is permitted if true; if false |
|
and the proposed filename exists, a new name will be generated by |
|
adding an appropriate number suffix. |
|
|
|
Returns: |
|
str: Suitable output filename |
|
""" |
|
dirName, fileName = os.path.split(input) |
|
fileName, ext = os.path.splitext(fileName) |
|
if outputDir: |
|
dirName = outputDir |
|
fileName = numberAddedRE.split(fileName)[0] |
|
if extension is None: |
|
extension = os.path.splitext(input)[1] |
|
output = os.path.join(dirName, fileName + suffix + extension) |
|
n = 1 |
|
if not overWrite: |
|
while os.path.exists(output): |
|
output = os.path.join( |
|
dirName, fileName + suffix + "#" + repr(n) + extension |
|
) |
|
n += 1 |
|
return output |
|
|