自动化手动的东西

时间:2016-11-06 15:07:05

标签: python python-2.7 python-3.x

我正在自动化我们的日常工作。这里我的代码将目录的绝对路径作为输入。它读取目录中按文件名排序的每个文件。然后它连接每个文件的内容以形成一个字符串。最后的连接字符串需要得到验证。如果string是有效的,那么如果它是无效的表达式,它将产生true,否则为false。我在想 有效表达式:“(a + b)* c +(d / e)',I 表达式无效:“(a + b”。

这是用于执行操作的代码。

from math import *
import os
import glob

Path = os.path.abspath("mydir/myfile.txt")
files = glob.glob(Path)
for name in files:
    try:
        with open(name) as f:
            s+=f.read()
            sys.stdout.write(s)
    except IOError as exec:
        if exc.errno != errno.EISDIR:
            raise

def validateSyntax(a):
    functions = {'__builtins__': None}
    variables = {'__builtins__': None}
    functions = {'acos': acos,
        'asin': asin,
        'atan': atan,
        'atan2': atan2,
        'ceil': ceil,
        'cos': cos,
        'cosh': cosh,
        'degrees': degrees,
        'exp': exp,
        'fabs':fabs,
        'floor': floor,
        'fmod': fmod,
        'frexp': frexp,
        'hypot': hypot,
        'ldexp': ldexp,
        'log': log,
        'log10': log10,
        'modf': modf,
        'pow': pow,
        'radians': radians,
        'sin': sin,
        'sinh': sinh,
        'sqrt': sqrt,
        'tan': tan,
        'tanh': tanh}

    variables = {'e': e, 'pi': pi}

    try:
        eval(s,variables, functions)
    except (SyntaxError, NameError, ZeroDivisionError):
        return False
    else:
        pass

1 个答案:

答案 0 :(得分:1)

好的,如果这会得到任何下选票,我会删除,但我真的认为这是对提出的问题的实际答案。

首先,欢迎来到SO,不要让任何可能让你心烦意乱的人放弃。我们都想帮忙,我们知道你在学习。我也是。但是,你必须回报,这是通过整齐,有条不紊地输入你的问题来完成的,并且表明你花费了不可忽视的时间来处理它。这意味着包括:

  • 输入和所需输出的清晰描述
  • 任何有助于我们减少猜测时间的规范
  • 您尝试过的(实际运行的)
  • 的代码示例
  • 关于他们为什么不工作的原因(证明,即叠加痕迹)
  • 您认为接下来的步骤是什么

我可能正在背诵SO欢迎页面或者其他内容......无论如何,我已经为您整理了您的代码,并进行了快速的Google搜索,以便为您提供一些想法。

首先,请勿使用exec来解决此问题。不是因为它“危险”,而是因为它是不必要的。它也会慢得多。让我们坚持角色处理。

经过90秒的Google搜索(数学表达式“验证器”python )后,我会使用http://codegists.com/snippet/python/math-expression-syntax-validator-of-parentheses-in-python-3

对于更复杂的事情,这看起来很不错http://effbot.org/zone/simple-top-down-parsing.htm

现在你去那里,你需要提供一个规范。希望至少有一些有用:)