def test_get_file_creation_date(self): path = self.temp_path("a/b/c.txt") fsutil.create_file(path, content="Hello World") creation_date = fsutil.get_file_creation_date(path) now = dt.datetime.now() self.assertTrue((now - creation_date) < dt.timedelta(seconds=0.1)) time.sleep(0.2) creation_date = fsutil.get_file_creation_date(path) now = dt.datetime.now() self.assertFalse((now - creation_date) < dt.timedelta(seconds=0.1))
def test_get_file_last_modified_date(self): path = self.temp_path("a/b/c.txt") fsutil.create_file(path, content="Hello") creation_date = fsutil.get_file_creation_date(path) time.sleep(0.2) fsutil.write_file(path, content="Goodbye", append=True) now = dt.datetime.now() lastmod_date = fsutil.get_file_last_modified_date(path) self.assertTrue((now - lastmod_date) < dt.timedelta(seconds=0.1)) self.assertTrue((lastmod_date - creation_date) > dt.timedelta(seconds=0.15))
def list_files(startpath, filter=None, catfunc=None, wbufferfilename=".data.json"): """ liste tous les fichiers (sous-répertoires inclus) à partir de 'startpath' puis filtre suivant les extensions données par 'filter' - exemple ['jpg', 'png'] puis classe les fichiers en fonction de catfunc (défault *) puis écrit un fichier json dans le répertoire scanné (wbufferfilename) """ for root, dirs, files in os.walk(startpath): # remove hidden files = [f for f in files if not f[0] == "."] dirs[:] = [d for d in dirs if not d[0] == "."] # tree level = root.replace(startpath, "").count(os.sep) indent = " " * 1 * (level) output_string = "{}{}/".format(indent, os.path.basename(root)) subindent = " " * 1 * (level + 1) # init dict for json wbuffer = dict() wbuffer["_root"] = { "root": root, "startpath": root.replace(startpath, ""), "level": level, } # cosmetic print print(f"{output_string} {root} {filter}") # scan files for f in files: path = f"{root}/{f}" ext = os.path.splitext(f)[1][1:] file_noext = os.path.splitext(f)[0] # skip if ext not in filter if filter and ext not in filter: continue # get file informations f_date = fsutil.get_file_creation_date(path) f_size = fsutil.get_file_size(path) f_hash = fsutil.get_file_hash(path) # get file category by function and write dict for json if catfunc: cat = catfunc(file_noext, ext) else: cat = "*" _tmp = { "file": f, "ext": ext, "date": f_date, "size": f_size, "hash": f_hash, } if cat in wbuffer: wbuffer[cat].append(_tmp) else: wbuffer[cat] = [_tmp] # cosmetic print(f"{subindent} {ext} > {f} > {f_date} > {f_size} bytes > {f_hash}") # write json wbuffer_file = f"{root}/{wbufferfilename}" with open(wbuffer_file, "w+", encoding="utf-8") as fp: json.dump(wbuffer, fp, cls=DateTimeEncoder) # cosmetic print(f"file {wbuffer_file} saved")