Add a script showing the use of pathlib and rglob to catalog files in a set of folders which can output in CSV format
This commit is contained in:
parent
cd2af582c2
commit
cf51a4b90b
57
Python/Examples/catalog_videos.py
Executable file
57
Python/Examples/catalog_videos.py
Executable file
|
@ -0,0 +1,57 @@
|
|||
#!/usr/bin/python
|
||||
|
||||
import os
|
||||
import pathlib
|
||||
import sys
|
||||
|
||||
def usage():
|
||||
print("Usage: catalog_videos.py <root_folder> [output_folder]")
|
||||
print(" <root_folder> is the folder to start locating videos")
|
||||
print(" [output_folder] is where catalog files will be written")
|
||||
print(" this is optional an defaults to CWD")
|
||||
print()
|
||||
print("This program will recursively locate all files")
|
||||
print("located beneath a specified folder and output")
|
||||
print("the results in a comma separated value list (CSV)")
|
||||
print()
|
||||
sys.exit()
|
||||
|
||||
# If no arguments provided then show usage and exit
|
||||
if len(sys.argv) == 1:
|
||||
usage()
|
||||
|
||||
# If root_folder is not a directory then show usage and exit
|
||||
if not os.path.isdir(sys.argv[1]):
|
||||
print(f"Error: Folder \"{sys.argv[1]}\" does not exist.")
|
||||
usage()
|
||||
|
||||
# If an output folder is provided then make sure it exists
|
||||
output_dir = "."
|
||||
if len(sys.argv) == 3:
|
||||
if os.path.isdir(sys.argv[2]):
|
||||
output_dir = sys.argv[2]
|
||||
else:
|
||||
print(f"Error: Output folder \"{sys.argv[2]}\" does not exist.")
|
||||
usage()
|
||||
|
||||
root_dir = sys.argv[1]
|
||||
root_path = pathlib.Path(root_dir)
|
||||
|
||||
# Walk the root_folder
|
||||
for item in root_path.glob("*"):
|
||||
file_contents = "Root Folder,File Name\n"
|
||||
# If item is a subfolder, walk that
|
||||
if item.is_dir():
|
||||
file_count = 0
|
||||
for subitem in item.rglob("*"):
|
||||
if subitem.is_file():
|
||||
file_count += 1
|
||||
file_contents += f"{item.name},{subitem.name}\n"
|
||||
# If subfolder has any items then output the results
|
||||
# This ensures we don't overwrite contents if the folder
|
||||
# is suddenly empty or the drive has failed
|
||||
if file_count != 0:
|
||||
with open(os.path.join(output_dir, item.name + ".csv"), "w") as f:
|
||||
f.write(file_contents)
|
||||
|
||||
# vim: ts=4 sw=4 et ai mouse-=a:
|
Loading…
Reference in New Issue
Block a user