七娃资源论坛

 找回密码
 立即注册
搜索
热搜: 电影 喜剧
查看: 57|回复: 0

用python编写的一个导出文件目录的小程序

[复制链接]
发表于 2025-4-14 23:13:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

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格式支持

增加文件过滤选项

添加文件哈希值计算

支持树状结构显示

添加进度条显示
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表