2017-12-04 22 views
0

私は次のPython 2.7コードを持っています。目的は、csvファイルを読み込み、CSVファイルの各行のスクリプトを実行することです。Python - 割り当てエラーの前に参照されるローカル変数 - CSVファイルの読み込み

CSVファイルは次のようになります(無ヘッダ、列Aのすべてのファイル名 - 行ごとに1つのファイル名、コンマ区切りではない)

ftp_abc_REFRESH_a 
ftp_dep_a 

スクリプトは最初のファイルのために動作しますが、2番目に失敗しました次のエラーを含むファイル:

timestamp = oupload.stat(file).st_atime 
UnboundLocalError: local variable 'file' referenced before assignment 

何か助けていただければ幸いです。感謝:)

スクリプト:

def myscript(ofile): 

    import time 
    import pysftp 
    import sys 
    import os 
    from datetime import datetime 
    import calendar 
    import zipfile 
    import re 

    oupload = pysftp.Connection(host="hostbcd", username="admin", password="abcs") 

    d = datetime.utcnow() 
    unixtime=calendar.timegm(d.utctimetuple()) 

    month = datetime.now().strftime("%m") 


    string = ofile+month+".*\.txt$" 

    possibleFiles = oupload.listdir("/") 
    for filename in possibleFiles: 
      filedate = re.search(string, filename) 
      if filedate: 
       file = filename 

    timestamp = oupload.stat(file).st_atime 
    #if timestamp > unixtime - 54050 - 30 days 
    if timestamp != unixtime: 
     newtime=unixtime + 1800 
     abmfile='filename_' 
     zipname = abmfile+str(newtime)+'.sync.zip' 
     create_zip = zipfile.ZipFile(zipname, 'w', zipfile.ZIP_DEFLATED) 
     oupload.get(file,file) 
     oupload.close() 
     newfilename = abmfile+str(newtime)+'.sync' 
     os.rename(file, newfilename) 
     create_zip.write(newfilename) 
     create_zip.close() 

    else: 
     print "No files found" 

import csv 
with open("data.csv", 'r') as csv_file: 
    reader = csv.reader(csv_file) 

    for row in reader: 
     ofile = row[0] 
     result = myscript(ofile) 
+0

'file = filename'という行が実行されていることを確認しましたか?私はファイルの初期値を示唆し、 'for filename in possibleFiles:'ループの前にそれを割り当てて、ループの後で変更されているかどうかを確認します。 – JLev

+0

変数 'file'を持たないのは' ofile'ですか? – WhatsThePoint

答えて

0

エラーがあなたのほとんどすべてを示しています。

をこれは、あなたが以前に設定されていないものを使用しようとしていることを意味します。

fileを初期化する唯一の瞬間は、if文if filedateにあります。条件を渡していないので、エラーと初期化されていないfileオブジェクトです。

+0

"timestamp = oupload.stat(file).st_atime" - 私はこの行に起こるエラーの前にファイル変数を設定しているので、ちょっと混乱します。ありがとう –

+0

@NickEdwards 'file'は' fileded'の場合にのみ初期化され、 'bool(filedate)== False'の場合はどうなるか考えてください。 –

+0

私が心配する限り、あなたは' file'変数に何かしようとしています。それ以前に設定されていない 私が見ているのは、 'oupload'、' d'、(...)、 'possibleFiles'、' filedate'、** if-and-only-if- 'is not'')、' file'です。 あなたのコードに正しく従うと、探している日付が見つからないということが起こっています。したがって、if文は 'file'変数を埋めることはありません。 関数が正しく停止し、スクリプトを続行できるようにするために必要な処理を行う例外ケース 'ファイルがない場合は'を作成することをお勧めします。 – IMCoins

関連する問題