There's a great library added in Python 3.5 that lets you return a list of filenames and folders called glob, here's how to use it.

Return files and folders in current folder.

>>> glob('**')
['scaffolds', 'node_modules', 'yarn.lock', '_config.yml', 'source', 'db.json', 'themes', 'package.json', 'package-lock.json']

Return files and folders recursively

>>> glob('**', recursive=True)
['scaffolds', 'scaffolds/post.md', 'scaffolds/page.md', 'scaffolds/draft.md', 'node_modules', '...']

Return only specific type of files

  • recursively
>>> glob('*.json', recursive=True)
['db.json', 'package.json', 'package-lock.json']
  • non-recursively
>>> glob('**/*.md', recursive=True)
['scaffolds/post.md', 'scaffolds/page.md', 'scaffolds/draft.md', '...']
  • recursively from another folder
>>> glob('source/**/*.md', recursive=True)
['source/README.md', 'source/about/index.md', 'source/_posts/class-inheritance-with-python.md', 'source/_posts/How-to-securely-store-sensitive-configuration-with-dotenv.md', '...']

Print a list of filenames:

  • Relative path
>>> for file in glob('source/**/*.md', recursive=True):
...     print(file)
...
'source/README.md'
'source/about/index.md'
'source/_posts/class-inheritance-with-python.md'
'source/_posts/How-to-securely-store-sensitive-configuration-with-dotenv.md'
'source/_posts/Hello-all.md'
'source/_posts/return-a-list-of-files-and-absolute-path-with-python.md'
'source/_posts/scraping-web-data-with-requests-and-beautifulsoup-part-2.md'
  • Absolute path
>>> import os
>>> from glob import glob
>>> for file in glob('source/**/*.md', recursive=True):
...     print(os.path.abspath(file))
...
'/home/franccesco/workspace/codingdose.info/source/README.md'
'/home/franccesco/workspace/codingdose.info/source/about/index.md'
'/home/franccesco/workspace/codingdose.info/source/_posts/class-inheritance-with-python.md'
'/home/franccesco/workspace/codingdose.info/source/_posts/How-to-securely-store-sensitive-configuration-with-dotenv.md'
'/home/franccesco/workspace/codingdose.info/source/_posts/Hello-all.md'
'/home/franccesco/workspace/codingdose.info/source/_posts/return-a-list-of-files-and-absolute-path-with-python.md'
'/home/franccesco/workspace/codingdose.info/source/_posts/scraping-web-data-with-requests-and-beautifulsoup-part-2.md'

Have fun.