Skip to content

Instantly share code, notes, and snippets.

@villares
Created September 20, 2017 03:05
Show Gist options
  • Save villares/705c514f47bdb7e4c01e9cb6106c90f7 to your computer and use it in GitHub Desktop.
Save villares/705c514f47bdb7e4c01e9cb6106c90f7 to your computer and use it in GitHub Desktop.
"""
* Listing files in directories and subdirectories
* inspired by an example by Daniel Shiffman.
*
* 1) List the names of files in a directory
* 2) List the names along with metadata (size, lastModified)
* of files in a directory
* 3) List the names along with metadata (size, lastModified)
* of files in a directory and all subdirectories (using recursion)
"""
from datetime import datetime
import os
def sizeof_fmt(num):
for fmt in ['%3d bytes', '%3dK', '%3.1fM', '%3.1fG']:
if num < 1024.0:
return fmt % num
num /= 1024.0
def print_file_details(f, depth=0):
if os.path.basename(f)[0] == '.':
return # no dotfiles
print ' ' * depth, # funny Python syntax: trailing comma means no newline
if os.path.isdir(f):
print "+%s" % os.path.basename(f)
else:
mtime = datetime.fromtimestamp(os.path.getmtime(f))
info = '%s, modified %s' % (sizeof_fmt(os.path.getsize(f)),
mtime.strftime("%Y-%m-%d %H:%M:%S"))
print "%-30s %s" % (os.path.basename(f), info)
def list_recursively(f, depth=0):
if os.path.basename(f)[0] == '.':
return # no dotfiles
print_file_details(f, depth)
if os.path.isdir(f):
for g in os.listdir(f):
path = os.path.join(f, g)
list_recursively(path, depth + 1)
topdir = os.getcwd()
print "Listing names of all files in %s:" % topdir
for f in os.listdir(topdir):
print f
print "Listing info about all files in %s:" % topdir
for f in os.listdir(topdir):
print_file_details(f)
print "---------------------------------------"
print "Descending into %s:" % topdir
list_recursively(topdir)
exit()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment