12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- """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
|