|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
以下是一个用Python编写的文件目录导出程序,可以将指定目录下的文件结构导出为文本、CSV或JSON格式:
python
import os
import sys
import argparse
import csv
import json
from datetime import datetime
def get_file_info(root_path, include_metadata=True):
"""遍历目录并收集文件信息"""
file_list = []
for root, dirs, files in os.walk(root_path):
for name in files + dirs:
full_path = os.path.join(root, name)
file_info = {
"path": full_path,
"name": name,
"type": "directory" if os.path.isdir(full_path) else "file",
}
if include_metadata and file_info["type"] == "file":
try:
stat = os.stat(full_path)
file_info.update({
"size": stat.st_size,
"modified": datetime.fromtimestamp(stat.st_mtime).isoformat(),
"created": datetime.fromtimestamp(stat.st_ctime).isoformat(),
})
except Exception as e:
print(f"无法读取 {full_path} 的元数据: {e}", file=sys.stderr)
file_list.append(file_info)
return file_list
def export_text(data, output_file):
"""导出为文本格式"""
max_path = max(len(item["path"]) for item in data) + 2
header = f"{'路径':<{max_path}} {'类型':<10} {'大小':>10} {'修改时间':<25}"
with open(output_file, "w", encoding="utf-8") as f:
f.write(header + "\n")
f.write("-" * len(header) + "\n")
for item in data:
line = f"{item['path']:<{max_path}} {item['type']:<10}"
if "size" in item:
line += f" {item['size']:>10} {item['modified']:<25}"
f.write(line + "\n")
def export_csv(data, output_file):
"""导出为CSV格式"""
with open(output_file, "w", newline="", encoding="utf-8") as f:
writer = csv.writer(f)
writer.writerow(["Path", "Name", "Type", "Size (bytes)", "Modified", "Created"])
for item in data:
writer.writerow([
item["path"],
item["name"],
item["type"],
item.get("size", ""),
item.get("modified", ""),
item.get("created", ""),
])
def export_json(data, output_file):
"""导出为JSON格式"""
with open(output_file, "w", encoding="utf-8") as f:
json.dump(data, f, indent=2, ensure_ascii=False)
def main():
parser = argparse.ArgumentParser(description="文件目录导出工具")
parser.add_argument("directory", help="要导出的目录路径", nargs="?", default=".")
parser.add_argument("-o", "--output", help="输出文件名(默认:directory_structure.[ext])")
parser.add_argument("-f", "--format", choices=["txt", "csv", "json"], default="txt",
help="输出格式(默认:txt)")
parser.add_argument("-m", "--metadata", action="store_true",
help="包含文件元数据(大小、修改时间等)")
args = parser.parse_args()
if not os.path.isdir(args.directory):
print(f"错误:目录不存在 - {args.directory}")
sys.exit(1)
output_file = args.output or f"directory_structure.{args.format}"
data = get_file_info(args.directory, args.metadata)
try:
if args.format == "txt":
export_text(data, output_file)
elif args.format == "csv":
export_csv(data, output_file)
elif args.format == "json":
export_json(data, output_file)
print(f"成功导出到 {output_file}")
except Exception as e:
print(f"导出失败: {e}")
sys.exit(1)
if __name__ == "__main__":
main()
功能特点:
支持三种输出格式:文本、CSV、JSON
可递归遍历子目录
可选包含文件元数据(大小、修改时间等)
自动处理路径异常
支持中文字符编码
友好的命令行界面
使用方法:
基本用法:
bash
python directory_exporter.py [目录路径]
指定输出格式:
bash
python directory_exporter.py /path/to/dir -f csv
包含元数据:
bash
python directory_exporter.py /path/to/dir -m
自定义输出文件名:
bash
python directory_exporter.py /path/to/dir -o custom_output.csv -f csv
输出示例(文本格式):
路径 类型 大小 修改时间
-----------------------------------------------------------------------
./test_dir directory
./test_dir/file1.txt file 1024 2023-08-20T15:30:45
./test_dir/subdir directory
./test_dir/subdir/image.jpg file 2048000 2023-08-20T15:31:12
注意事项:
需要Python 3.6+环境
处理大量文件时可能需要较长时间
某些系统文件可能需要管理员权限才能访问
JSON格式输出会保留所有元数据信息
可以根据需要扩展以下功能:
添加Excel格式支持
增加文件过滤选项
添加文件哈希值计算
支持树状结构显示
添加进度条显示 |
|