2017-12-29 22 views
1

Ich habe ein sehr einfaches Skript, das ein Stück Daten als CSV-Datei nimmt und die Zeitstempel in ganze Stunden umwandelt. Ein Teil dieser Zeitumwandlung beinhaltet das Paket datetime, aber der Import des Pakets wird nicht in die Funktion übernommen, die die Neuformatierung durchführt, und ich habe keine Ahnung warum.Python-Paket-Import nicht in Funktion

Mein Code:

from datetime import datetime, timedelta 
from dateutil import parser 
import sys 


def whole_hours(datafileloc, outfileloc): 
    whole_hour_data = {} 
    f = open(datafileloc, "r") 
    data = f.readlines() 
    f.close() 

    for line in data[1:]: 
     time = parser.parse(line.split(",")[0]) 
     values = line.split(",")[1:] 

     if time.minute >= 30: 
      newtime = datetime(year=time.year, month=time.month, day=time.day, hour=time.hour, minute=0) + timedelta(hours=1) 
     else: 
      newtime = datetime(time.year, time.month, time.day, time.hour, 0) 

     if newtime not in whole_hour_data.keys(): 
      whole_hour_data[newtime] = {"oldtime": time, "values": values} 
     else: 
      oldtime = whole_hour_data[newtime]["oldtime"] 
      if abs((time - newtime).total_seconds()) < abs((oldtime - newtime).total_seconds()): 
       whole_hour_data[newtime] = {"oldtime": time, "values": values} 

    with open(outfileloc, "w") as outfile: 
     outfile.write(data[0]) 
     for datetime in sorted(whole_hour_data.keys()): 
      outfile.write("{datetime},{values}".format(datetime=datetime, values=",".join(whole_hour_data[datetime]["values"]))) 


whole_hours("C:/Users/<user>/Documents/test.csv", "C:/Users/<user>/Documents/output.csv") 

Wenn dieses Skript ausgeführt wird, erhalte ich folgende Fehlermeldung:

Traceback (most recent call last): 
    File "C:/Users/<user>/test.py", line 73, in <module> 
    whole_hours("C:/Users/<user>/Documents/test.csv", "C:/Users/<user>/Documents/output.csv") 
    File "C:/Users/<user>/test.py", line 54, in whole_hours 
    newtime = datetime(year=time.year, month=time.month, day=time.day, hour=time.hour, minute=0) + timedelta(hours=1) 
UnboundLocalError: local variable 'datetime' referenced before assignment 

Hinweis ich meinen Benutzernamen habe maskiert :) ich, dass ich dachte, ich herausarbeiten können um diesen Fehler mit von Datetime Import Datetimeinnerhalb die Funktion, oder geben Sie das Datetime-Paket als Parameter für die Funktion, aber ich frage mich, warum diese n Dies ist erforderlich, wenn das Paket bereits zu Beginn des Skripts importiert wurde. Ich habe mehrere ähnliche Skripts erstellt, die diesen zusätzlichen Import nicht benötigen.

+1

Sie haben datetime in Ihrem Iterator verwendet, und dies überschreibt die Importanweisung. Das könnte ein Problem verursachen, aber ich bin mir nicht sicher, ob es das für dich löst. – tmwilson26

Antwort

3

ein Code-Abschnitt Es ist, wo Sie Wert über eine for-Schleife hier laufen:

for datetime in sorted(whole_hour_data.keys()): 

Wenn Sie das tun, ich denke, dass Python jetzt Datetime als lokalen Variable sieht und nicht eine globale Importanweisung. Sie sollten diesen Variablennamen ändern.

+0

Wow, ich kann nicht glauben, dass ich so dumm war ... Vielen Dank, das hat mein Problem gelöst! Immer noch nicht klar, warum eine zusätzliche Import-Anweisung in der Funktion das lösen würde. –

Verwandte Themen