Source code for rse.utils.file

"""

Copyright (C) 2020 Vanessa Sochat.

This Source Code Form is subject to the terms of the
Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed
with this file, You can obtain one at http://mozilla.org/MPL/2.0/.

"""

import errno
import fnmatch
import json
import os
import pickle
import tempfile


[docs]def get_latest_modified(base, pattern="*.json"): """Given a folder, get the latest modified file""" files = list(recursive_find(base, pattern)) if not files: return None return max(files, key=os.path.getctime)
[docs]def recursive_find(base, pattern="*.py"): """recursive find will yield python files in all directory levels below a base path. Arguments: - base (str) : the base directory to search - pattern: a pattern to match, defaults to *.py """ for root, _, filenames in os.walk(base): for filename in fnmatch.filter(filenames, pattern): yield os.path.join(root, filename)
[docs]def read_file(filename, readlines=True): """write_file will open a file, "filename" and write content and properly close the file. Arguments: - filename (str) : the filename to read - readlines (bool) : read lines of the file (vs all raw) """ with open(filename, "r") as filey: if readlines is True: content = filey.readlines() else: content = filey.read() return content
[docs]def write_file(filename, content): """Write some text content to a file""" with open(filename, "w") as fd: fd.write(content)
[docs]def write_json(json_obj, filename, pretty=True): """write_json will write a json object to file, pretty printed Arguents: - json_obj (dict) : the dict to print to json - filename (str) : the output file to write to """ with open(filename, "w") as filey: if pretty: filey.writelines(json.dumps(json_obj, indent=4, separators=(",", ": "))) else: filey.writelines(json.dumps(json_obj)) return filename
[docs]def read_json(input_file): """Read json from an input file. Arguments: - input_file (str) : the filename to read """ with open(input_file, "r") as filey: data = json.loads(filey.read()) return data
[docs]def save_pickle(obj, filename): """Save a pickle to file Arguments: - obj (any) : the object to pickle - filename (str) : the output file to write to """ with open(filename, "wb") as fd: pickle.dump(obj, fd) return filename
[docs]def mkdir_p(path): """mkdir_p attempts to get the same functionality as mkdir -p Arguments: - path (str) : the path to create """ try: os.makedirs(path) except OSError as e: if e.errno == errno.EEXIST and os.path.isdir(path): pass else: raise e
[docs]def get_tmpfile(prefix=""): """get a temporary file with an optional prefix. By default, the file is closed (and just a name returned). Arguments: - prefix (str) : prefix with this string """ tmpdir = tempfile.gettempdir() prefix = os.path.join(tmpdir, os.path.basename(prefix)) fd, tmp_file = tempfile.mkstemp(prefix=prefix) os.close(fd) return tmp_file
[docs]def get_tmpdir(prefix="", create=True): """get a temporary directory for an operation. Arguments: - prefix (str) : prefix with this string - create (bool) : create the folder (defaults to true) """ tmpdir = tempfile.gettempdir() prefix = prefix or "rse-temp" prefix = "%s.%s" % (prefix, next(tempfile._get_candidate_names())) tmpdir = os.path.join(tmpdir, prefix) if not os.path.exists(tmpdir) and create: os.mkdir(tmpdir) return tmpdir