0

if/elseコマンドの一部しか機能しないコマンドに問題がある。スクリプトが実行されると、 のif場合はその部分を完了しますが、false の場合はステートメントをname == check_fileスキップして次のタスクに移動します。else以下は、正しく機能していないコードの一部です。

    for name in zip_file_names:
        copy_to = copy_this.get(name)
        if copy_to is not None:
            source_file = os.path.join(r'\\svr-dc\ftp site\%s\daily' % item, name)
            destination = os.path.join(r"C:\%s" % item, copy_to)
            shutil.copy(source_file, destination)
            print name, "has been verified and copied."
        elif copy_to is not None:
            print "%s has been completed." % item
        else:
            print "Repoll %s for %s" % (item, business_date_one)
            print "Once information is downloaded press any key."
            re_download = raw_input(" ")
            ext_ver_cop_one()

最後elseは解凍したファイル名で操作に必要ないので渡さなくてはならないif/elseのですが、そのif/else文の中がうまく動かない理由がわかりません。特にそのif部分がうまく機能しているためです。考え?

4

3 に答える 3

2

1 番目ifが true と評価される (つまり、内部ifにまったく到達する) 場合、2 番目もまったく同じ条件であるため、自動的に true と評価されます。

ループの最後にある は何もしないのでif、外側の を削除する必要があります。else: passいずれにせよ、反復は実行を終了するだけです (このコード ブロックの後にループが続く場合を除きます)。

さらに議論した後、次のようなことをしたいようです:

for name in zip_file_names:
    if name == sz_check_file:
        print name, "Date is verified."
        source_file = os.path.join(r'\\svr-dc\ftp site\%s\daily' % item, sz_check_file)
        destination = os.path.join(r"C:\%s" % item, 'sales.xls')
        shutil.copy(source_file, destination)
        shutil.copy(source_file, r"C:\%s" % item)
        sz_found = true #Flag that sz was found
        print "sales.xls has been copied."
    elif name == sc_check_file:
        print name, "Date is verified."
        source_file = os.path.join(r'\\svr-dc\ftp site\%s\daily' % item, sc_check_file)
        destination = os.path.join(r"C:\%s" % item, 'cosales.xls')
        shutil.copy(source_file, destination)
        shutil.copy(source_file, r"C:\%s" % item)
        sc_found = true #Flag that sc was found
        print "cosales.xls has been copied."
#Check flags to ensure all files found
if !(sz_found&&sc_found):
    print "Repoll %s for %s" % (item, business_date_seven)
    print "Once information is downloaded press any key."
    re_download = raw_input(" ")
    ext_ver_cop_seven()

さまざまなファイルにフラグを追加しました-4と言ったので、アイデアを拡張して他のファイルをチェックする必要があります。コピーするファイルを追加する場合、より拡張可能なフラグを設定する別の方法を見つけることもできますが、それが一般的な考え方です。見つかったものをループで追跡し、必要なものがすべて見つかったかどうかをループ後に確認します。

于 2013-08-15T16:44:24.367 に答える
0

すべてのファイルではなく、必要なファイルの観点からコードを反転すると、コードははるかに単純になります。また、後でセットを簡単に拡張できるように、関数の本体からファイル名を除外する方が適切です。

def parse_zipfile (zip_names, **required):
   '''
   found is a dictionary with all the name > filename pairs that are present
   missing is a list of the names that are not found in found
   '''
   found = dict( (item,required[item]) for item in required if item in zip_names)
   missing = [item for item in required if not item in found]
  return found, missing

required_files = {'sz_checkfile':'sales.xls', 'sc_checkfile':'cosales.xls'}

found, missing = parse_zipfile(zip_names, **required_files}
if missing:
    #print error message
else:
    for source, target in found.items():
        #copy source to target

日付に適したファイル文字列をキーとして**必要な辞書を生成する別の関数を用意することをお勧めします

于 2013-08-15T17:29:10.013 に答える