def rename_back(timestring="", fileext=".JPG"): """ rename back using backup in saves; change to directory you want to rename back :param timestring: time of backup :param fileext: file extension :return: """ log_function_call(rename_back.__name__) dirname = get_saves_dir() tagFile = os.path.join(dirname, "Tags" + fileext + "_" + timestring + ".npz") if not timestring or os.path.isfile(tagFile): tagFiles = [x for x in os.listdir(dirname) if ".npz" in x] tagFile = os.path.join(dirname, tagFiles[-1]) Tagdict = np.load(tagFile, allow_pickle=True)["Tagdict"].item() temppostfix = renameTemp(Tagdict["Directory"], Tagdict["File Name new"]) log().debug("length of Tagdict: %d", len(list(Tagdict.values())[0])) for i in range(len(list(Tagdict.values())[0])): filename = Tagdict["File Name new"][i] + temppostfix if not os.path.isfile(os.path.join(Tagdict["Directory"][i], filename)): continue filename_old = Tagdict["File Name"][i] renameInPlace(Tagdict["Directory"][i], filename, filename_old) Tagdict["File Name new"][i], Tagdict["File Name"][i] = Tagdict[ "File Name"][i], Tagdict["File Name new"][i] timestring = dateformating(dt.datetime.now(), "_MMDDHHmmss") np.savez_compressed(os.path.join(dirname, "Tags" + fileext + timestring), Tagdict=Tagdict)
def sanitize_filename(folder=r"", posttags_to_end: List[str] = None, onlyprint=False): """ sanitize order of Scene and Process tags sanitize counter to be split by $ sanitize sub process names added by a external program to by concat to main processname (only Hugin) :param folder: optional regex for restrict to folders :param posttags_to_end: optional for resorting special posttags to end :param onlyprint: if true, renaming will only printed to log and no files are renamed, good for testing :return: """ inpath = os.getcwd() for (dirpath, dirnames, filenames) in os.walk(inpath): if is_invalid_path(dirpath, regex=folder): continue for filename in (filenames + dirnames): filename = filename.replace("panorama", "PANO") filenameAccessor = FilenameAccessor(filename) _sanitize_posttags(filenameAccessor, posttags_to_end) _sanitize_process_counter(filenameAccessor) _sanitize_pano(filenameAccessor) filename_new = filenameAccessor.sorted_filename() if not filename == filename_new: log().info("rename: %s to %s", filename, filename_new) if not onlyprint: renameInPlace(dirpath, filename, filename_new)
def _rename_match(dirpath: str, filename: str, mode: str, match: Optional[Match[str]]): extension = filename[filename.rfind("."):] filename_new_part1 = match.group(1) + "_" + mode filename_new_part2 = match.group(2) + extension filename_new = filename_new_part1 + filename_new_part2 i = 2 while os.path.isfile(os.path.join(dirpath, filename_new)): filename_new = filename_new_part1 + "%d" % i + filename_new_part2 i += 1 renameInPlace(dirpath, filename, filename_new)
def rename_temp_back(): """ rename temporary renamed files back """ inpath = os.getcwd() matchreg = 'temp$' for (dirpath, dirnames, filenames) in os.walk(inpath): for filename in filenames: match = re.search(matchreg, filename) if not match: continue newFilename = re.sub(matchreg, '', filename) renameInPlace(dirpath, filename, newFilename)
def rename_from_exif(): """ use exif information written by :func:`write_exif_using_csv` to restore filename """ Tagdict = read_exiftags() if has_not_keys(Tagdict, keys=["Label"]): return temppostfix = renameTemp(Tagdict["Directory"], Tagdict["File Name"]) leng = len(list(Tagdict.values())[0]) for i in range(leng): filename = Tagdict["File Name"][i] ext = filename[filename.rfind('.'):] renameInPlace(Tagdict["Directory"][i], filename + temppostfix, Tagdict["Label"][i] + ext)
def _write(directory, filename, temppostfix, newname, onlyprint): if not onlyprint: renameInPlace(directory, filename + temppostfix, newname) return "%-50s\t %-50s\n" % (filename, newname)