Python 将文件内容映射到文件类型
整个想法是从文件中读取变量,该文件中也包含导入:Python 将文件内容映射到文件类型,python,file,Python,File,整个想法是从文件中读取变量,该文件中也包含导入: 规则: 1) 文件不可触摸(我们可以读取,但不可修改) 2) 我们不希望从文件导入变量导入(仅从文件导入变量) 3) 我们不包装临时文件(假定没有写访问权限) 我的想法有两个步骤: 1) (完成),将文件读取到内存并注释所有导入行 2) 使用imp导入值 2a)将文件内容映射回文件类型 2b)使用imp.load\u source() 2c){key:value for key,value in foo.\uu dict\uuu.iteritem
规则:
1) 文件不可触摸(我们可以读取,但不可修改)
2) 我们不希望从文件导入变量导入(仅从文件导入变量)
3) 我们不包装临时文件(假定没有写访问权限)
我的想法有两个步骤:
1) (完成),将文件读取到内存并注释所有导入行
2) 使用imp导入值
2a)将文件内容映射回文件类型
2b)
使用imp.load\u source()
2c)
{key:value for key,value in foo.\uu dict\uuu.iteritems()如果不是key.startswith('''')}
卡在2a
上,有人能帮助/支持我吗
示例文件:# from os import *
myvar = 'aaa'
如果我正确理解了您的需求,通常邪恶的
eval
可以在这里提供帮助。通常不赞成这种做法,因为执行任意代码是不安全的,但并不比加载任意脚本更不安全
因此,假设您能够读取文件并对所有导入语句进行注释和注释,并且生成的脚本是字符串script\u 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'未定义
我的意见是,在最一般的情况下修复它会很困难…我们需要一个示例来回答您的问题-即,我们需要查看您的输入文件的外观以及预期结果。我添加了示例文件。您可以将其作为stringIO对象,但imp.load\u源需要路径。我正在寻找解决方案更重要的是,你应该更清楚你想要得到什么样的输出。是不是
['myvar']
?还是{'myvar':'aaa'}
?或者它完全是另一回事?对包含未注释文件的字符串执行exec
怎么样exec
是不安全的,应该只在受信任的输入上使用(但对于导入来说可能也是如此)Aran Fey它的{'myvar':'aaa'}正是我想要的!您还添加了易于理解的潜在问题描述,我非常感谢您,如果可以的话,我会提供更多!