最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python腳本實(shí)現(xiàn)掃描指定目錄下.py文件并提取import語(yǔ)句

 更新時(shí)間:2026年03月12日 08:31:54   作者:weixin_30777913  
這篇文章主要為大家詳細(xì)介紹了如何使用Python腳本實(shí)現(xiàn)掃描指定目錄下.py文件并提取import語(yǔ)句,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下

Python腳本用于掃描指定目錄下所有的.py文件,提取其中所有的import語(yǔ)句中的模塊名(包括相對(duì)導(dǎo)入),去重后按時(shí)間戳命名輸出到文本文件。

完整代碼

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
掃描目錄下所有 Python 文件,提取所有 import 語(yǔ)句中的模塊名,
去重后保存到以時(shí)間戳命名的文本文件中。
"""

import os
import sys
import ast
import argparse
from datetime import datetime


def extract_imports_from_file(filepath):
    """
    解析單個(gè) Python 文件,返回該文件中導(dǎo)入的所有模塊名(集合)。
    支持:
        - import module
        - import module as alias
        - from module import name
        - from module import name as alias
        - 相對(duì)導(dǎo)入(from . import x, from ..sub import y 等)
    """
    modules = set()
    try:
        with open(filepath, 'r', encoding='utf-8') as f:
            content = f.read()
        tree = ast.parse(content, filename=filepath)

        for node in ast.walk(tree):
            if isinstance(node, ast.Import):
                # import module, import module as alias
                for alias in node.names:
                    modules.add(alias.name)  # 完整模塊名
            elif isinstance(node, ast.ImportFrom):
                # from module import ...
                if node.module:
                    # 絕對(duì)導(dǎo)入或相對(duì)導(dǎo)入但指定了模塊(如 from .sub import x)
                    if node.level > 0:
                        # 相對(duì)導(dǎo)入,模塊名前加對(duì)應(yīng)數(shù)量的點(diǎn)
                        module = '.' * node.level + node.module
                    else:
                        module = node.module
                else:
                    # 純相對(duì)導(dǎo)入(如 from . import x, from .. import y)
                    module = '.' * node.level
                modules.add(module)
    except Exception as e:
        print(f"警告:解析文件 {filepath} 時(shí)出錯(cuò):{e}", file=sys.stderr)

    return modules


def main():
    parser = argparse.ArgumentParser(
        description='掃描目錄下的 Python 文件,提取所有 import 模塊名并去重輸出。'
    )
    parser.add_argument(
        'directory',
        nargs='?',
        default='.',
        help='要掃描的目錄(默認(rèn):當(dāng)前目錄)'
    )
    args = parser.parse_args()

    target_dir = args.directory
    if not os.path.isdir(target_dir):
        print(f"錯(cuò)誤:'{target_dir}' 不是一個(gè)有效的目錄。", file=sys.stderr)
        sys.exit(1)

    all_modules = set()

    # 遞歸遍歷目錄
    for root, dirs, files in os.walk(target_dir):
        for file in files:
            if file.endswith('.py'):
                filepath = os.path.join(root, file)
                modules = extract_imports_from_file(filepath)
                all_modules.update(modules)

    if not all_modules:
        print("未找到任何 import 語(yǔ)句。")
        return

    # 排序后輸出
    sorted_modules = sorted(all_modules)

    # 生成時(shí)間戳文件名
    timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
    output_filename = f"imports_{timestamp}.txt"

    with open(output_filename, 'w', encoding='utf-8') as f:
        for module in sorted_modules:
            f.write(module + '\n')

    print(f"共找到 {len(sorted_modules)} 個(gè)唯一模塊。")
    print(f"結(jié)果已寫(xiě)入:{output_filename}")


if __name__ == '__main__':
    main()

使用方法

將上述代碼保存為 .py 文件(例如 scan_imports.py)。

在終端中運(yùn)行:

python scan_imports.py [要掃描的目錄](méi)

如果不指定目錄,則默認(rèn)掃描當(dāng)前目錄。

腳本會(huì)在當(dāng)前目錄下生成一個(gè)類(lèi)似 imports_20250311_143022.txt 的文件,每行列出一個(gè)模塊名(已去重)。

功能說(shuō)明

  • 遞歸掃描指定目錄下所有 .py 文件。
  • 使用 Python 的 ast 模塊解析代碼,準(zhǔn)確提取各種形式的 import 語(yǔ)句(包括別名和相對(duì)導(dǎo)入)。
  • 對(duì)于 from ... import ...,記錄 from 后面的模塊名(相對(duì)導(dǎo)入會(huì)保留前導(dǎo)點(diǎn)號(hào))。
  • 對(duì)于 import ...,記錄 import 后面的模塊名(包括點(diǎn)號(hào)分隔的子模塊)。
  • 去重后按字母順序排序,輸出到以時(shí)間戳命名的文本文件。

到此這篇關(guān)于Python腳本實(shí)現(xiàn)掃描指定目錄下.py文件并提取import語(yǔ)句的文章就介紹到這了,更多相關(guān)Python掃描py文件并提取import語(yǔ)句內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python socket編程實(shí)例詳解

    Python socket編程實(shí)例詳解

    這篇文章主要介紹了Python socket編程,以實(shí)例形式較為詳細(xì)的分析了Python中socket模塊的使用技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-05-05
  • Python OpenCV實(shí)戰(zhàn)之與機(jī)器學(xué)習(xí)的碰撞

    Python OpenCV實(shí)戰(zhàn)之與機(jī)器學(xué)習(xí)的碰撞

    機(jī)器學(xué)習(xí)是人工智能的子集,為計(jì)算機(jī)以及其它具有計(jì)算能力的系統(tǒng)提供自動(dòng)預(yù)測(cè)或決策的能力。本文主要介紹了OpenCV 提供的常見(jiàn)機(jī)器學(xué)習(xí)算法和技術(shù),用于解決計(jì)算機(jī)視覺(jué)項(xiàng)目中的實(shí)際問(wèn)題,需要的朋友可以參考一下
    2021-12-12
  • 對(duì)Pandas MultiIndex(多重索引)詳解

    對(duì)Pandas MultiIndex(多重索引)詳解

    今天小編就為大家分享一篇對(duì)Pandas MultiIndex(多重索引)詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11
  • 解決Jupyter無(wú)法導(dǎo)入已安裝的 module問(wèn)題

    解決Jupyter無(wú)法導(dǎo)入已安裝的 module問(wèn)題

    這篇文章主要介紹了解決Jupyter無(wú)法導(dǎo)入已安裝的 module問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04
  • Python?range函數(shù)生成一系列連續(xù)整數(shù)的內(nèi)部機(jī)制解析

    Python?range函數(shù)生成一系列連續(xù)整數(shù)的內(nèi)部機(jī)制解析

    這篇文章主要為大家介紹了Python?range函數(shù)生成一系列連續(xù)整數(shù)的內(nèi)部機(jī)制解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • Python基礎(chǔ)學(xué)習(xí)之函數(shù)和代碼復(fù)用詳解

    Python基礎(chǔ)學(xué)習(xí)之函數(shù)和代碼復(fù)用詳解

    函數(shù)能提高應(yīng)用的模塊性,和代碼的重復(fù)利用率,下面這篇文章主要給大家介紹了關(guān)于Python基礎(chǔ)學(xué)習(xí)之函數(shù)和代碼復(fù)用的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • python中dict獲取關(guān)鍵字與值的實(shí)現(xiàn)

    python中dict獲取關(guān)鍵字與值的實(shí)現(xiàn)

    這篇文章主要介紹了python中dict獲取關(guān)鍵字與值的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Python如何截圖保存的三種方法(小結(jié))

    Python如何截圖保存的三種方法(小結(jié))

    這篇文章主要介紹了Python如何截圖保存的三種方法(小結(jié)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • 使用pytorch讀取數(shù)據(jù)集

    使用pytorch讀取數(shù)據(jù)集

    這篇文章主要介紹了使用pytorch讀取數(shù)據(jù)集,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Pyhton多線程采集圖片方式

    Pyhton多線程采集圖片方式

    這篇文章主要介紹了Pyhton多線程采集圖片方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12

最新評(píng)論

天峨县| 涡阳县| 西平县| 当雄县| 巴彦县| 嘉鱼县| 迭部县| 榆社县| 黄石市| 拉孜县| 彰化县| 武强县| 乐清市| 建德市| 阳信县| 洛扎县| 屏东市| 石家庄市| 克东县| 尼勒克县| 乐亭县| 伊宁市| 陵水| 安吉县| 宁国市| 旅游| 吕梁市| 阳山县| 恩平市| 和静县| 阆中市| 淳安县| 永仁县| 西乡县| 大悟县| 额济纳旗| 教育| 隆德县| 梁平县| 调兵山市| 马尔康县|