我将数据保存在postgreSQL数据库中.我使用Python2.7查询这些数据并将其转换为Pandas DataFrame.但是,此数据框的最后一列中包含值的字典(或列表?).DataFrame看起来像这样:
[1] df
Station ID Pollutants
8809 {"a": "46", "b": "3", "c": "12"}
8810 {"a": "36", "b": "5", "c": "8"}
8811 {"b": "2", "c": "7"}
8812 {"c": "11"}
8813 {"a": "82", "c": "15"}
Run Code Online (Sandbox Code Playgroud)
我需要将此列拆分为单独的列,以便DataFrame如下所示:
[2] df2
Station ID a b c
8809 46 3 12
8810 36 5 8
8811 NaN 2 7
8812 NaN NaN 11
8813 82 NaN 15
Run Code Online (Sandbox Code Playgroud)
我遇到的主要问题是列表的长度不同.但是所有列表只包含相同的3个值:a,b和c.它们总是以相同的顺序出现(第一个,第二个,第三个).
以下代码用于工作并返回我想要的内容(df2).
[3] df
[4] objs = [df, pandas.DataFrame(df['Pollutant Levels'].tolist()).iloc[:, :3]]
[5] df2 = pandas.concat(objs, axis=1).drop('Pollutant Levels', axis=1) …Run Code Online (Sandbox Code Playgroud) 我想将一个数学运算符和要比较的数值传递给一个函数.这是我破碎的代码:
def get_truth(inp,relate,cut):
if inp print(relate) cut:
return True
else:
return False
Run Code Online (Sandbox Code Playgroud)
并称之为
get_truth(1.0,'>',0.0)
Run Code Online (Sandbox Code Playgroud)
哪个应该返回True.
我想创建一个人们可以上传他们的Python脚本的网站.当然我想执行这些脚本.这些脚本应该做一些有趣的工作.问题是人们可能上传可能损害我的服务器的脚本,我想阻止它.在不损害我的系统的情况下运行任意脚本的选项是什么 - 实际上根本没有看到我的系统?谢谢
假设互联网上有一台服务器可以发送一段代码进行评估.在某些时候,服务器会获取已提交的所有代码,并开始运行和评估它.但是,在某些时候它肯定会碰到一些邪恶的程序员发送的"os.system('rm -rf*')".除了"rm -rf"之外,你可以期待人们尝试使用服务器发送垃圾邮件或者给某人发送垃圾邮件,或者使用"while True:pass"之类的东西.
有没有办法与这种不友好/不受信任的代码合作?特别是我对python的解决方案很感兴趣.但是,如果您有任何其他语言的信息,请分享.
我将python作为脚本平台嵌入到应用程序中,因此用户可以编写python脚本.我试图阻止进口,因此无论如何它们都不会造成损害,并且必须坚持使用提供的API.
我提出了以下Python代码:
__builtins__ .__import__= None
reload = None
Run Code Online (Sandbox Code Playgroud)
这似乎阻止了导入并阻止了模块的重新加载.需要防止重新加载,因此他们无法重新加载内置组件,从而使它们恢复工作状态.
但是我不是Python专家.我还缺少其他任何用户仍然可以导入模块的东西吗?
谢谢
这是这样的场景,我的网站有一些由网站用户生成的不安全代码,可以在我的服务器上运行。
我想禁用 python 的一些保留字以保护我的运行环境,例如eval、exec等print。
有没有一种简单的方法(不改变python解释器,我的python版本是2.7.10)来实现我之前描述的功能?
序言:我知道很多人已经尝试在Python中沙箱化Python代码并且失败了,但是我还没有看到将脚本作为文本进行额外预处理的方法,并且拒绝包含类似关键字的脚本__base__可以用来恢复隐藏__buuiltins__.我认为这种方法是新的,尚未证明失败 - 是吗?
我计划编写一个多人策略游戏,玩家通常不会使用键盘/鼠标命令与他们的单位交互,但只能通过他们必须提交的脚本来改变单位的自动行为.这是基于http://screeps.com的想法.
我想在Python 3中编写它,但主要问题似乎是在服务器上安全执行不受信任的外部播放器脚本.我知道,我可能不信任exec()或eval()将它们空,即使,globals并locals作为环境.我也知道简单的擦除__builtins__也行不通,因为人们仍然可以使用Python的内省功能轻松恢复它们,如下所述:http://nedbatchelder.com/blog/201302/finding_python_3_builtins.html
我已经知道PyPy或Jython可能有某种沙盒功能可能适用于我的目的,但我不知何故更愿意继续使用CPython参考解释器.此外,我只能找到这些沙盒功能适用于整个程序的示例,但没有一个包含将不受信任的脚本作为子线程运行并与它们高效通信的主程序.
但我认为我还有一次机会:我可以按字面意思预处理提交的脚本并搜索字符串,__class__或者__base__拒绝包含这些关键字的脚本.我也必须更换eval(),并exec()在我自己的,安全功能也拒绝运行包含这些关键字的代码脚本.
这种方法是否会与使用自定义globals参数覆盖所有潜在危险的物品(哪些会是?)exec()一起安全?我需要查找哪些关键字?
如果没有,为什么会失败?你能提出更好的解决方案吗?
可能重复:
Python,安全,沙箱
我正在用Python构建一个企业Web系统,它允许上传脚本并运行服务器端.鉴于我已经开发了Python及其如此简单的语言,它似乎是编写脚本的好语言.但是,存在安全隐患,我想阻止除有限子集之外的所有函数调用.有没有一种机制可以用来做这个或其他技术?我还需要使用别的东西吗?我正在开发Pyramid/Pylons.
好.我知道 的 专家 都 讲,你不应该永远使用Python的eval()不受信任的数据,直到永远.我并不比世界其他地方更聪明,甚至不应该尝试这个.但!无论如何,我要去.
我的基本问题是我正在编写一个小计算器评估程序,它将使用python语法的一个子集进行不可信的输入.我知道:使用ply或pyparsing并编写解析器然后我们去.通过传递全局和本地人来解决这个问题是eval()不行的.
我所看到的所有方法(并且一直保持冷漠)试图列举邪恶.在这里,我试图枚举好 - 得到一个AST,只允许几个节点类型,然后验证任何调用是否属于一组白名单函数之一.这是一个迷你实现(和要点):
import ast
import math
SAFE_FX = {
'exp': math.exp,
}
SAFE_NODES = set(
(ast.Expression,
ast.Num,
ast.Call,
ast.Name,
ast.Load,
ast.BinOp,
ast.Add,
ast.Sub,
ast.Mult,
ast.Div,)
)
class CleansingNodeVisitor(ast.NodeVisitor):
def generic_visit(self, node):
if type(node) not in SAFE_NODES:
raise Exception("%s not in SAFE_NODES" % type(node))
super(CleansingNodeVisitor, self).generic_visit(node)
def visit_Call(self, call):
if call.func.id not in SAFE_FX:
raise Exception("Unknown function: %s" % …Run Code Online (Sandbox Code Playgroud) python ×10
sandbox ×2
scripting ×2
security ×2
dataframe ×1
dictionary ×1
eval ×1
execution ×1
function ×1
import ×1
interpreter ×1
pandas ×1
parsing ×1
pylons ×1
pyramid ×1
python-2.7 ×1
python-3.x ×1