当前位置: 首页 > news >正文

Python扫描目录提取import语句

Python脚本用于扫描指定目录下所有的.py文件,提取其中所有的import语句中的模块名(包括相对导入),去重后按时间戳命名输出到文本文件。

#!/usr/bin/env python3# -*- coding: utf-8 -*-""" 扫描目录下所有 Python 文件,提取所有 import 语句中的模块名, 去重后保存到以时间戳命名的文本文件中。 """importosimportsysimportastimportargparsefromdatetimeimportdatetimedefextract_imports_from_file(filepath):""" 解析单个 Python 文件,返回该文件中导入的所有模块名(集合)。 支持: - import module - import module as alias - from module import name - from module import name as alias - 相对导入(from . import x, from ..sub import y 等) """modules=set()try:withopen(filepath,'r',encoding='utf-8')asf:content=f.read()tree=ast.parse(content,filename=filepath)fornodeinast.walk(tree):ifisinstance(node,ast.Import):# import module, import module as aliasforaliasinnode.names:modules.add(alias.name)# 完整模块名elifisinstance(node,ast.ImportFrom):# from module import ...ifnode.module:# 绝对导入或相对导入但指定了模块(如 from .sub import x)ifnode.level>0:# 相对导入,模块名前加对应数量的点module='.'*node.level+node.moduleelse:module=node.moduleelse:# 纯相对导入(如 from . import x, from .. import y)module='.'*node.level modules.add(module)exceptExceptionase:print(f"警告:解析文件{filepath}时出错:{e}",file=sys.stderr)returnmodulesdefmain():parser=argparse.ArgumentParser(description='扫描目录下的 Python 文件,提取所有 import 模块名并去重输出。')parser.add_argument('directory',nargs='?',default='.',help='要扫描的目录(默认:当前目录)')args=parser.parse_args()target_dir=args.directoryifnotos.path.isdir(target_dir):print(f"错误:'{target_dir}' 不是一个有效的目录。",file=sys.stderr)sys.exit(1)all_modules=set()# 递归遍历目录forroot,dirs,filesinos.walk(target_dir):forfileinfiles:iffile.endswith('.py'):filepath=os.path.join(root,file)modules=extract_imports_from_file(filepath)all_modules.update(modules)ifnotall_modules:print("未找到任何 import 语句。")return# 排序后输出sorted_modules=sorted(all_modules)# 生成时间戳文件名timestamp=datetime.now().strftime("%Y%m%d_%H%M%S")output_filename=f"imports_{timestamp}.txt"withopen(output_filename,'w',encoding='utf-8')asf:formoduleinsorted_modules:f.write(module+'\n')print(f"共找到{len(sorted_modules)}个唯一模块。")print(f"结果已写入:{output_filename}")if__name__=='__main__':main()

使用方法

  1. 将上述代码保存为.py文件(例如scan_imports.py)。
  2. 在终端中运行:
    python scan_imports.py[要扫描的目录]
    如果不指定目录,则默认扫描当前目录。
  3. 脚本会在当前目录下生成一个类似imports_20250311_143022.txt的文件,每行列出一个模块名(已去重)。

功能说明

  • 递归扫描指定目录下所有.py文件。
  • 使用 Python 的ast模块解析代码,准确提取各种形式的import语句(包括别名和相对导入)。
  • 对于from ... import ...,记录from后面的模块名(相对导入会保留前导点号)。
  • 对于import ...,记录import后面的模块名(包括点号分隔的子模块)。
  • 去重后按字母顺序排序,输出到以时间戳命名的文本文件。
http://www.jsqmd.com/news/463633/

相关文章:

  • BilibiliDown:5个实用技巧助你轻松下载B站高清音频
  • 如何快速搭建WeChatFerry微信机器人:零基础也能轻松上手的智能对话助手教程
  • 如何快速生成视频字幕?Video-SRT-Windows 让字幕制作变得如此简单
  • 如何快速下载B站视频?BilibiliDown跨平台视频下载神器使用指南
  • 抖音下载神器:3分钟学会批量下载无水印视频的终极指南
  • DBus未来路线图:新功能预览与社区贡献指南
  • 法律场景语音转写难点突破:Paraformer专业词汇优化案例
  • 智能资源嗅探器:一站式跨平台内容下载完整解决方案
  • 如何使用Figma转HTML工具:连接设计与代码的智能桥梁
  • 终极免费原神工具箱:彻底解放你的游戏数据管理
  • 终极PHP安全解决方案:企业级加密库完全指南
  • 终极安卓防撤回神器使用指南:再也不怕错过重要消息
  • 如何为vue-admin-better构建组件文档:告别“猜谜游戏“的终极指南
  • 终极免费方案:Idle Master帮你轻松挂取Steam交易卡片
  • Windows系统下Apple触控板完美兼容配置终极指南
  • MATLAB图像导出终极指南:用export_fig实现出版级画质
  • 3步掌握de4js:让混淆的JavaScript代码重获新生
  • 7个实用技巧!用vue-admin-better构建高效前端组件文档系统
  • KouShare-dl:5步掌握蔻享学术资源下载技巧
  • 数据库管理效率提升实战指南:5个必学Chat2DB技巧
  • Idle Master终极指南:轻松获取Steam交易卡片的完整教程
  • 如何快速掌握yidaRule:动态规则引擎的终极实践指南
  • 如何使用TikTokDownload:2024抖音去水印批量下载神器的完整指南
  • 如何在Android官方模拟器上安装Magisk:完整配置指南
  • 终极指南:5个核心技巧实现轻量级Windows系统容器化部署
  • 从零开始掌握pwndbg:高效调试与漏洞分析终极指南
  • 索尼相机隐藏功能完全解锁指南:从入门到精通的全方位教程
  • 告别手动烦恼:PT批量下载高效管理的智能解决方案
  • ExplorerPatcher终极指南:在Windows 11中恢复经典操作体验
  • 如何快速打造专业邮件签名:开源工具的完整指南