#!/usr/bin/pythonimport pandas as pdimport sysimport osimport timeimport datetimefrom mlabutils import ejsonparser = ejson.Parser()#### Script Arguments ###############################################if len(sys.argv) != 2:sys.stderr.write("Invalid number of arguments.\n")sys.stderr.write("Usage: %s CONFIG_FILE\n" % (sys.argv[0], ))sys.exit(1)value = parser.parse_file(sys.argv[1])dataSource = value['data_path'] # raw datadataArchive = value['data_archive'] # archive for row datadataUpload = value['data_upload'] # computed mean values for uploadstationName = value['origin']loop = 1csvHeader = "Date;LevelMeter;Temperature1;Conductivity;Salinity;TDSKcl;Temperature2;pH;Redox" #csv headersleepTime = 1000 # sleep time in secondswhile True:try:print("Start")## Create sorted list of csv fileslistOfDataFiles = list() #empty listlistOfSpecDataFiles = list() #empty listfiles = list() #empty listflag = False # is computation neededfiles = sorted(os.listdir(dataSource)) # list of all files and folders in directoryfor idx, val in enumerate(files): #goes through filesif val.endswith("data.csv"): # in case of *data.csvlistOfDataFiles.append(val) #add file to listOfFiles## Find the newest and oldest and compare them. If they are from different day, compute the average of all measurement from oldest dayif len(listOfDataFiles)>=2: # if there are more than 2 data filesfirst = listOfDataFiles[0] # get first of themlast = listOfDataFiles[-1] # get last of themif time.mktime(datetime.datetime.strptime(last[:8], "%Y%m%d").timetuple()) > time.mktime(datetime.datetime.strptime(first[:8], "%Y%m%d").timetuple()): # if the last is older than firstflag = True # computation neededprint("Computing...")print(loop)loop +=1listOfSpecDataFiles = list() # empty listfor file in listOfDataFiles: # go through data files and create lis of data files measured on same day# if the day is same like the first oneif time.mktime(datetime.datetime.strptime(first[:8], "%Y%m%d").timetuple()) == time.mktime(datetime.datetime.strptime(file[:8], "%Y%m%d").timetuple()):listOfSpecDataFiles.append(file)filename = dataUpload + first[:8]+'000000_' + stationName + '_data_mean.csv'for file in listOfSpecDataFiles:df=pd.read_csv(dataSource + file, sep=';', header=None) # read current csvdim=df.shape # gets data file dimensionsrowsInd=dim[0] # maximal index of rowscolumnsInd=dim[1] # maximal index of columnsvalues=pd.DataFrame() # empty DataFramefor x in range(0,columnsInd): # for each columnvalues = values.set_value(0,x,round(df[x].mean(),3),0) #calculates mean value for all cloumns and round it by 3outfile = open(filename, 'a')values.to_csv(filename, sep=';', header=False, index=False, mode='a') # save (add) DataFrame to csvoutfile.close()#adding headerwith open(filename, 'r+') as f:content = f.read()f.seek(0, 0)f.write(csvHeader.rstrip('\r\n') + '\n' + content)# move files to archive structurefor file in listOfSpecDataFiles:year = file[:4]month = file[4:6]day = file[6:8]directory = dataArchive + year + "/" + month + "/" + day + "/"if not os.path.exists(directory):os.makedirs(directory)os.rename(dataSource + file, directory + file) # move fileelse:flag = False # computation is not neededelse:flag = False # computation is not neededif flag == False:time.sleep(sleepTime) #long sleep, because is nothing to processexcept ValueError:print ValueError