将文件内容映射到文件类型

2024-04-19 13:23:13 发布

您现在位置:Python中文网/ 问答频道 /正文

整个想法是从文件中读取变量,文件中也包含导入:
规则:
1) 文件不可触摸(我们可以读取,但不能修改)
2) 我们不想从文件导入变量导入(仅从文件导入变量)
3) 我们不包装临时文件(假设没有写访问权限)

我的想法有两个步骤:
1) (完成),将文件读取到内存并注释所有导入行
2) 使用imp导入值
2a)将文件内容映射回文件类型
2b)use imp.load_source()
2c){key: value for key, value in foo.__dict__.iteritems() if not key.startswith('_')}

困在2a,有人能帮助/支持我吗?你知道吗

示例文件:

# from os import *
myvar = 'aaa'

Tags: 文件key内存权限source内容forvalue
1条回答
网友
1楼 · 发布于 2024-04-19 13:23:13

如果我正确理解了您的需求,那么通常邪恶的eval可以在这里提供帮助。通常不赞成这种做法,因为执行任意代码是不安全的,但并不比加载任意脚本更不安全。你知道吗

因此,假设您能够读取一个文件并对所有import语句进行注释和注释,并且结果脚本是一个字符串script_str,您可以简单地执行以下操作:

glob = {}  # or glob = globals() if you want current globals to be accessible
loc = {}
exec(script_str, glob, loc)
vars = { key:loc[key] for key in loc if not key.startswith('_') }

问题是,对脚本中的某些行进行注释可能会导致错误的脚本或产生错误的结果。示例:

from os import SEEK_END

how = SEEK_END

它应该导致{ "how": 2 }。不幸的是,如果不注释导入,您将得到{'SEEK_END': 2, 'how': 2},但是注释之后,exec调用将引发一个异常NameError: name 'SEEK_END' is not defined。你知道吗

我的意见是,在最普遍的情况下解决它将是困难的。。。你知道吗

相关问题 更多 >