循环有多个变量

时间:2012-05-31 15:57:34

标签: python cgi

这可能是一个愚蠢的问题,但我无法弄清楚如何简化这段代码。

我有一个包含11个文件上传按钮的网络表单。 这些被标记为p1-3,q1-5,x1-2和cb。

在处理上传的脚本中,我需要检查是否正在上传新文件,或者是否只更改了一个(或没有)文件。

如果它被更改,我保存并创建一个ogg以用于音频标签。

这是问题所在。如何干净地遍历变量名称?现在我有这样的十一个街区,这让我感到畏缩。

我想简单地创建一个函数来处理if:raise之后的所有内容很容易,但我想做的只是传递一个函数列出我正在寻找的名字,拥有它分配一个变量,并处理业务。

    try:
            x2 = form['x2']
            if not x2.filename: raise
            outfile = '%s/x2.wav' % savepath
            oggfile = '%s/x2.ogg' % oggdir
            open(outfile, 'wb').write(x2.file.read())
            command = 'oggenc %s -o %s' % (outfile, oggfile)
            output = subprocess.check_output(command, shell=True, stderr=subprocess.STDOUT)
    except:
            pass

2 个答案:

答案 0 :(得分:4)

尝试以下内容:

for x in ('p1', 'p2', 'p3', 'q1', 'q2', 'q3', 'q4', 'q5', 'x1', 'x2'):
    try:
        f = form[x]
        if not f.filename: raise
        outfile = '%s/%s.wav' % (savepath, x)
        oggfile = '%s/%s.ogg' % (oggdir, x)
        open(outfile, 'wb').write(f.file.read())
        command = 'oggenc %s -o %s' % (outfile, oggfile)
        output = subprocess.check_output(command, shell=True, stderr=subprocess.STDOUT)
    except:
        pass

答案 1 :(得分:3)

fields = ('p1', 'p2', 'p3', 'q1', 'q2', 'q3', 'q4', 'q5', 'x1', 'x2', 'cb')
for name in fields:
    field = form[name]
    if not field.filename: 
        continue # skips to the next field

    outfile = '%s/%s.wav' % (savepath, name)
    oggfile = '%s/%s.ogg' % (oggdir, name)
    # and so on ...