Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将文件内容映射到文件类型_Python_File - Fatal编程技术网

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'}正是我想要的!您还添加了易于理解的潜在问题描述,我非常感谢您,如果可以的话,我会提供更多!