【问题标题】:list all the imports from the given python code as a string将给定 python 代码中的所有导入作为字符串列出
【发布时间】:2020-12-15 17:24:47
【问题描述】:

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

例子:

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

示例2:

注意:如果使用别名导入包,即“as”,则应仅打印别名而不是包名

    **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 中提到的别名之后打印包

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)

【问题讨论】:

标签: python regex


【解决方案1】:
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))

【讨论】:

  • 这不返回任何内容
  • 代码正常,我添加了示例行代码,你能再试一次吗?
猜你喜欢
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 2020-03-21
  • 2014-04-19
  • 2016-05-06
  • 2022-01-14
  • 2017-05-26
  • 1970-01-01
相关资源
最近更新 更多