Python递归目录和文件名写入到txt树
引言
在开发过程中,我们经常需要遍历目录中的文件和子目录,并将它们的结构以树形方式写入到txt文件中。Python中的递归函数非常适合解决这个问题,本文将介绍如何使用Python递归实现目录和文件名写入到txt树。
流程图
flowchart TD
A[开始] --> B[遍历目录]
B --> C[递归功能]
C --> D[判断是否为目录]
D --> E[获取目录名]
D --> F[获取文件名]
E --> G[写入目录名]
F --> G[写入文件名]
G --> H[递归子目录]
H --> C
C --> I[结束]
I --> J[生成txt树形结构]
J --> K[保存txt文件]
步骤详解
- 遍历目录:使用
os.walk()
方法遍历目录下的所有文件和子目录。
import os
def traverse_directory(root):
for dirpath, dirnames, filenames in os.walk(root):
# 递归功能
- 递归功能:在递归函数中,我们需要判断当前遍历的对象是目录还是文件,并做相应的处理。
def traverse_directory(root):
for dirpath, dirnames, filenames in os.walk(root):
for dirname in dirnames:
# 获取目录名
directory_path = os.path.join(dirpath, dirname)
# 写入目录名
write_to_txt(directory_path)
for filename in filenames:
# 获取文件名
file_path = os.path.join(dirpath, filename)
# 写入文件名
write_to_txt(file_path)
# 递归子目录
for dirname in dirnames:
traverse_directory(os.path.join(dirpath, dirname))
- 判断是否为目录:使用
os.path.isdir()
方法判断当前对象是否为目录。
def traverse_directory(root):
for dirpath, dirnames, filenames in os.walk(root):
for dirname in dirnames:
directory_path = os.path.join(dirpath, dirname)
# 判断是否为目录
if os.path.isdir(directory_path):
write_to_txt(directory_path)
for filename in filenames:
file_path = os.path.join(dirpath, filename)
write_to_txt(file_path)
for dirname in dirnames:
traverse_directory(os.path.join(dirpath, dirname))
- 获取目录名和文件名:使用
os.path.basename()
方法获取目录名和文件名。
def traverse_directory(root):
for dirpath, dirnames, filenames in os.walk(root):
for dirname in dirnames:
directory_path = os.path.join(dirpath, dirname)
if os.path.isdir(directory_path):
# 获取目录名
directory_name = os.path.basename(directory_path)
write_to_txt(directory_name)
for filename in filenames:
file_path = os.path.join(dirpath, filename)
# 获取文件名
file_name = os.path.basename(file_path)
write_to_txt(file_name)
for dirname in dirnames:
traverse_directory(os.path.join(dirpath, dirname))
- 写入目录名和文件名:使用文件操作符
with open()
和write()
方法将目录名和文件名写入txt文件。
def write_to_txt(name):
with open('tree.txt', 'a') as file:
file.write(name + '\n')
- 生成txt树形结构:遍历目录和文件名后,生成树形结构。
def generate_tree():
with open('tree.txt', 'r') as file:
lines = file.readlines()
for line in lines:
indent = line.count('\t')
print(' ' * indent + line.strip())
- 保存txt文件:将生成的树形结构保存到txt文件。
def save_tree_to_txt():
with open('tree.txt', 'r') as file:
lines = file.readlines()
with open('tree_structure.txt', 'w') as new_file:
new_file.writelines(lines)
代码总结
下面是完整的代码:
import os
def write_to_txt(name):
with open('tree.txt', 'a') as file:
file.write(name + '\n')
def traverse_directory(root):
for dirpath, dirnames, filenames in os.walk(root):
for dirname in dirnames:
directory_path = os.path.join(dirpath