In this post, we'll see how to list files and directory tree structure in Python. We will use Python library and custom code:
(1) seedir - Python library for reading folder tree diagrams
import seedir as sd
path = '/home/user/'
sd.seedir(path=path, style='lines', exclude_folders='.git')
(2) list files and directory trees
for root, dirs, files in os.walk(start_path):
level = root.replace(start_path, '').count(os.sep)
indent = ' ' * 4 * (level)
print('{}{}/'.format(indent, os.path.basename(root)))
list files/folders with seedir
If you want quick and easy solution you can install library: seedir by:
pip install seeder
Then you can use it simply by few Python lines:
import seedir as sd
path = '/home/user/'
sd.seedir(path=path, style='lines', itemlimit=10, depthlimit=2, exclude_folders='.git')
This will return well structured file tree like:
seedir/
├─.gitattributes
├─.gitignore
├─.ipynb_checkpoints/
│ └─examples-checkpoint.ipynb
├─build/
│ ├─bdist.win-amd64/
│ └─lib/
├─CHANGELOG.md
├─dist/
│ └─seedir-0.1.4-py3-none-any.whl
├─docs/
│ ├─exampledir/
│ ├─gettingstarted.md
│ ├─seedir/
│ └─templates/
├─img/
│ ├─pun.jpg
│ ├─seedir_diagram.png
│ └─seedir_diagram.pptx
├─LICENSE
└─MANIFEST.in
There are many different parameters that we can control like:
style='dash'
sort=True
first='files'
depthlimit=2
itemlimit=1
exclude_folders='.git'
To read more about the API you can visit the official docs: Package seedir.
The method documentation is located here: seedir.realdir.seedir
Directory tree with icons
You need to install Python package emoji
in order to visualize the folder and file icons. This can be done by:
pip install emoji
Now we can visualize them by:
import seedir as sd
path = '/opt/sublime_text'
sd.seedir(path=path, style='emoji', exclude_folders='Packages')
The result is shown on the image below:
Custom solution - list folders and files
If you like to store the result into CSV file or JSON output then you may want to build a custom solution.
Below you can find an example how to list files and folders tree structure with Python code:
import os
def list_files_folders(start_path):
for root, dirs, files in os.walk(start_path):
level = root.replace(start_path, '').count(os.sep)
indent = ' ' * 4 * (level)
print(f'{indent}{os.path.basename(root)}/')
subindent = ' ' * 4 * (level + 1)
for f in files:
print(f'{subindent}{f}')
path = '/home/user/'
list_files_folders(path)
The result will be something like:
user/
note1.md
Documentation/
note2.md
note3.md
We will modify the code above in order to store the file structure to Pandas DataFrame in the next section.
Store file/folder tree as DataFrame
If you like to store the file tree with:
- item
- parent
- level
to a Pandas DataFrame we will modify the code to store all the folders as parent and child tree:
import os
import pandas as pd
data = []
def build_tree(root, level):
folder = os.path.basename(root)
parent = os.path.dirname(root)
parent_folder = parent.split('/')[-1]
# print(level, folder, parent_folder)
return [level, folder, parent_folder]
def list_folders(start_path):
for root, dirs, files in os.walk(start_path):
level = root.replace(start_path, '').count(os.sep)
indent = ' ' * 4 * (level)
subindent = ' ' * 4 * (level + 1)
data.append(build_tree(root, level))
list_folders('/home/user/')
df = pd.DataFrame(data)
df.columns = ['level', 'name', 'parent']
df
This will give us:
level | name | parent | |
---|---|---|---|
0 | 0 | Notes | |
1 | 0 | .obsidian | Notes |
2 | 1 | themes | .obsidian |
3 | 2 | Wombat | themes |
4 | 2 | Things | themes |
Now we can easily convert the file and directory tree to JSON or CSV by:
df.to_csv()
df.to_json()
More about those methods can be read here: How to Export DataFrame to JSON with Pandas
Conclusion
In this article, we tried to answer on the following questions:
- How do I get a list of files in a directory tree in Python?
- How do I get a list of files in Python?
- How to get a list of all files in a folder and subfolders in Python?
- How do I get a directory tree in Python?
- Convert directory tree to json in Python