繁体   English   中英

将给定 python 代码中的所有导入作为字符串列出

[英]list all the imports from the given python code as a string

列出来自给定 python 代码的所有导入

例子:

**Input**:
import string
**Output**: ['string']

示例 2:

注意:如果 package 是使用别名导入的,即“as”,它应该只打印别名而不是 package 名称

    **Input:**
    from string import digit, ascii_lowercase
    from datetime import datetime as dt, date as d, time as t
    # This is a comment
    def met_02():
        pass
    print('print this')
    **output**: ['digit', 'ascii_lowercase', 'dt', 'd', 't']

我尝试了以下代码,但它只打印导入,但它应该在别名(“as”)之后打印导入,如果存在,否则在示例 2 中提到的别名之后打印 package

def list_imports(lines):
    imports = []
    for file in lines:
            result = re.findall(r"(?<!from)import (\w+)[\n.]|from\s+(\w+)\s+import", lines)
            for imp in result:
                for i in imp:
                    if len(i):
                        if i not in imports:
                            imports.append(i)

    return (imports)
import re

def list_imports(lines):
    result = []
    
    # visit lines
    for line in lines:
        # get words after import definition
        for modules in re.compile('import (.*)$').findall(line):
            # split with comma
            for module in modules.split(','):
                # if module has 'as' keyword
                if ' as ' in module:
                    # get word after 'as' keyword
                    result.extend(re.compile('as\s+(\w+)').findall(module))
                else:
                    # add found module
                    result.append(module.strip())
    return result

lines = "from string import digit, ascii_lowercase\nfrom datetime import datetime as dt, date as d, time as t".split('\n')

print(list_imports(lines))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM