python - 将给定 python 代码中的所有导入作为字符串列出
问题描述
列出来自给定 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)
解决方案
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))
推荐阅读
- azure-data-factory - Azure 数据工厂数据流 CSV 架构漂移到 parquet 静态目标删除列。可能吗?
- android - 如何在 android studio 中创建一个新的活动模板
- django - Django:在处理用户表单时在视图中进行额外的 REST 调用
- sonarqube - SonarQube 在覆盖范围内包含测试类
- sql - 如何在 SELECT 中替换空白和 NULL
- angular - 如何在 ngx-agora 的角度模块中动态设置 AppID 键
- firefox - 如何强制 Firefox 按需重置其 DNS 缓存?
- c# - 在活动开始前一天发送提醒电子邮件
- ionic-framework - 在 Ionic 4 或 5 中使用 WebIntent 从其他应用程序接收数据
- python - Apache Kafka(v2.4.0) - Python 中的 Spark (v2.4.4) 流式集成