- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有许多操作大文件的 python 代码。在其中一些中,我在列之间执行操作或选择它们的内容。由于输入文件可以有不同的结构,操作是通过命令行提供的,语法类似于 c3 + c5 -1
或 (c3<4) & (c5>4)
(或组合)。 c4
被解释为输入文件的第四列。
我的文件看起来像这样('input_file.txt'):
21.3 4321.34 34.12 4 343.3 2 324
34.34 67.56 764.45 2 54.768 6 45265
986.96 87.98 234.09 1 54.456 3 5262
[...]
假设我想将第 4 列与第 5 列相加并减去 1。
我会做
import re
import numpy as np
operation = "c3 + c5 -1" #in reality given from command line
pattern = re.compile(r"c(\d+?)") # compile the regex that matches the column number
# get the actual expression to evaluate
to_evaluate = pattern.sub("ifile[:,\\1]", operation)
#to_evaluate is: "ifile[:,3] + ifile[:,5] -1"
ifile = np.loadtxt('input_file.txt')
result = eval(to_evaluate) #evaluate the operation required
print(result)
# do the rest
输出
[5, 7, 3, ...]
我想到这个实现是因为:
numpy
或 pandas
)或者我想添加操作,编写和修改都很容易c3 + c5 -1
、 (c3<4) & (c5>4)
或 (c2+c4)>0
。 我知道 eval
可能不安全(尽管目前我是这些代码的唯一用户)并且可能比相应的代码慢,但我想不出更好的方法。
有人知道实现此类操作的更好/更安全的方法吗?
额外编辑:如果重要的话,我正在运行 python 2.7
最佳答案
你可以做一个更安全的评估
def safe_eval(eval_str, variable_dict = None):
'''welll... mostly safe:
http://lybniz2.sourceforge.net/safeeval.html
'''
if variable_dict == None:
variable_dict = {}
return eval(eval_str, {"__builtins__" : None}, variable_dict)
虽然对于非常了解 python 的人来说,它永远不会完全安全(有关示例,请参见 http://nedbatchelder.com/blog/201206/eval_really_is_dangerous.html)
虽然您的申请让我感到困惑,所以我不确定我还能为您提供多少帮助!
我不确定这是否有助于解决您正在做的事情,但您可以做的一件事是将模块中的所有函数编译成字典。
所以你可以通过类似的方式编译你想使用的函数:
module_dict = {}
for n in dir(module):
module_dict[n] = eval('module.'+n)
(我相信此功能是 python 3 中的标准功能。即可以访问所有模块模块字典。)这会将所有函数调用置于字典形式,从而加快调用速度。它还解决了评估安全问题。
如果您尝试使用“+”或“=”等操作,您可以从 object.add 和 object.eq 获取它们的函数调用。您可以将这些调用存储到您的字符串语法中。
不确定是否有帮助。
关于python - 使用(out) eval() 执行用户给出的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15437955/
在我看来 eval()受到与 goto 相同的蔑视。由 eval ,我的意思是将字符串作为代码执行的函数,如在 PHP、Python、JavaScript 等中看到的。是否有使用 eval() 的情况
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 9 年前。 Improve this ques
我有几十个条件(例如,foo > bar)需要在 DataFrame 的 ~1 MM 行上进行评估,最简洁的方法编写此代码是为了将这些条件存储为字符串列表,并创建 bool 结果的 DataFrame
我正在创建一种编译为字节码并在自定义 VM 上运行的小型语言,其架构在很大程度上受到了我所阅读的有关 Python 和 Lua 的影响。有两个堆栈 - 一个存储函数参数、局部变量和临时值的数据堆栈,以
我正在尝试运行此代码: var aaa = await page.$$eval(selector, list => (list, value) => { return reso
我知道标题听起来很复杂,但为了保持动态,这是有目的的;) 示例(请注意,假定这些示例代码位于外部 eval 内) //Ex1 this works eval('function test (){}')
这是交易,我们有一个很大的 JS 库需要压缩,但是 YUI compressor如果发现“eval”语句,它不会完全压缩代码,因为担心它会破坏其他东西。这很好,但是我们确切地知道什么正在被评估,所以我
每门计算机科学类(class)中都讲授过这一点,并且在许多书籍中都写到程序员不应使用 GoTo。甚至还有一个 xkcd关于它的漫画。我的问题是我们是否达到了可以对 Eval 说同样的事情的地步? Go
这两种方法中的一种是否必须被优先使用,还是仅取决于口味? #!/usr/bin/env perl use warnings; use strict; use DBI; my $db = 'sqlite
如果存在“eval()”,uglify 不会破坏变量。命令行: uglifyjs script/script.js --compress --mangle --unsafe/path/to/scrip
我刚刚开始使用 Julia。我正在尝试使用 eval(在 Julia 中)来在函数中定义一组变量。假设我想将 v1 设置为 2: function fun_test(varargs...) v1
这个问题在这里已经有了答案: When is JavaScript's eval() not evil? (27 个答案) 关闭2 年前。 我从未遇到过需要 eval() 的情况。 人们常常说 []
这个问题在这里已经有了答案: "Variable" variables in JavaScript (9 个回答) Use dynamic variable names in JavaScript
好的 - 我有一个非常具体的案例,我需要使用 eval()。在人们告诉我我根本不应该使用 eval() 之前,让我透露一下我知道 eval 的性能问题、安全问题和所有这些问题。我在非常狭窄的情况下使用
我的问题是关于 JavaScript 闭包和 Eval() 函数。 我有一些看起来像这样的代码,还有一些其他 jQuery 插件相关的代码没有显示。如果需要,我可以用更多代码更新问题。 var _Cu
...或者有更好的方法来实现记忆化吗? Function.memoize = function(callableAsString) { var r = false, callable,
当我尝试在jmeter中执行以下代码时: import org.json.JSONArray; import org.json.JSONObject; String jsonString = prev
根据Mozilla docs为了使用 eval 执行函数,它必须被包装在 ( ) 中,即如果您不使用它们,那么它将被视为字符串. eval as a string defining function
标题看起来很蠢,但我不知道如何准确表达,抱歉。 我有一个程序需要评估一些用户代码(通过 RestrictedPython 以确保安全),并且我想将一个函数放入评估的全局变量中,以便它可以在评估时向我打
以下需要在函数范围内,因为在交互式控制台模式下不会发生奇怪的行为。 以下函数按预期返回 5 (function() { var x = 5; return eval("x"); })() 一个简单透明
我是一名优秀的程序员,十分优秀!