0

これはおそらくばかげた質問ですが、このコードを単純化する方法がわかりません。

11 個のファイル アップロード ボタンを含む Web フォームがあります。これらは、p1-3、q1-5、x1-2、および cb とタグ付けされています。

アップロードを処理するスクリプトで、新しいファイルがアップロードされているかどうか、または変更されているファイルが 1 つだけ (またはまったくない) かどうかを確認する必要があります。

変更されている場合は、保存してオーディオ タグで使用する ogg を作成します。

これが質問です。変数名をきれいに繰り返すにはどうすればよいですか? 現在、このようなブロックが 11 個あり、うんざりします。

後ですべてを処理する関数を作成する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
4

2 に答える 2

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
于 2012-05-31T16:02:39.047 に答える
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 ...
于 2012-05-31T16:05:55.307 に答える