def __init__(self, pData, interval = 1): self.name = pData.name self.interval_M = interval #分钟级间隔 self.datas = {} #原始数据 self.datasS = [] #统计数据集--天 self.datasS_M = None #统计数据对象--分钟级 self.data = pData #当前数据对象 self.setting = myQuote_Setting._Find(pData.name, pData.idTag) #配置项,以标识为准,避免名称不统一 self.autoSave = True self.stoped = False self.tagTime = datetime.datetime.now() self.manageTrades = gol._Get_Setting('manageBills_Stock', None) #使用交易管理器 gol._Set_Value('datas_Stics_D_' + pData.id, self.datasS) #全局统计信息 #保存基础数据 strDir, strName = myIO.getPath_ByFile(__file__) Dir_Base = os.path.abspath(os.path.join(strDir, "..")) self.dir = Dir_Base + "/Data/" + self.name + "/" self.fileName = myData_Trans.Tran_ToDatetime_str(pData.getTime(), "%Y-%m-%d") myIO.mkdir(self.dir) if(self.loadData()): #加载已存数据 self.setData(pData)
def saveData_stream_Trans(self, strDir = ""): #提取当前数据 if(strDir == ""): strDir = self.dir dictDatas = {} if(True): myDebug.Print("... load data(" + self.name + ")...") path = strDir + self.fileName + ".csv" pDt_csv = myIO_xlsx.DtTable() pDt_csv.dataFieldType = ['datetime', 'float', 'float', 'float'] #数据字段类型集 pDt_csv.Load_csv(path, isUtf = True) #组装数据 nRows = len(pDt_csv.dataMat) for x in range(nRows - 1, -1, -1): pData = copy.deepcopy(self.data) pData.datetime = None #清空时间(必须) pData.fromValueList(pDt_csv.dataMat[x]) #由表数据还原 dictDatas[pData.getTime()] = pData #字典排序 keys = list(dictDatas.keys()) keys.sort(key = None, reverse = True) #组装数据 pDt = myIO_xlsx.DtTable() pDt.dataField = self.data.csvHead().split(',') pDt.dataMat = [] for x in keys: pDt.dataMat.append(dictDatas[x].toValueList()) #保存基础数据 myIO.mkdir(strDir) pDt.Save(strDir, self.fileName, row_start = 0, col_start = 0, cell_overwrite = True, sheet_name = self.name, row_end = -1, col_end = -1, bSave_AsStr = False)
def __init__(self): #初始根目录信息 strDir, strName = myIO.getPath_ByFile(__file__) self.Dir_Base = os.path.abspath(os.path.join(strDir, "..")) self.Dir_Image = self.Dir_Base + "/Temps/Images/wxTemps/" self.Dir_Image = myIO.checkPath(self.Dir_Image) myIO.mkdir(self.Dir_Image, False)
def _log(self, id_Target, lon, lat, height, Q, deltaXY, deltaX, deltaY): if (self.hasLog == False): return #保存数据 strDir, strName = myIO.getPath_ByFile(__file__) strPath = strDir + "/static/Log" headStr = "" if (os.path.exists(strPath) == False): myIO.mkdir(strPath) strPath = strPath + "/" + myData_Trans.Tran_ToDatetime_str( None, "%Y-%m-%d") + ".csv" if (os.path.exists(strPath) == False): headStr = "id_Target, concentration, height, tag, longitude_Leak, latitude_Leak, height_Leak, massrate_Leak, speed, direction, windH, temperature, cloudy_is, chimney_diameter, chimney_temperature_outlet, chimney_temperature_outlet, chimney_wind_speed_outlet, dtTimestr, lon, lat, deltaXY, deltaX, deltaY" #文件追加数据内容 with open(strPath, 'a+') as f: if (headStr != ""): f.write(headStr) dtTimestr = myData_Trans.Tran_ToDatetime_str(self.dtLeak) if (self.hasChimney): infoChimney = F'{self.chimney_diameter},{self.chimney_temperature_outlet},{self.chimney_temperature_outlet},{self.chimney_wind_speed_outlet}' else: infoChimney = F',,,' strLine = F'{id_Target},{Q},{height},{self.tag},{self.longitude_Leak},{self.latitude_Leak},{self.height_Leak},{self.massrate_Leak},{self.wind.wind_Speed},{self.wind.wind_Direction_Alias},{self.wind.wind_Height},{self.air.temperature},{self.sun.numCloud},{infoChimney},{dtTimestr},{lon},{lat},{deltaXY},{deltaX},{deltaY}' f.write("\n" + strLine) return True
def __init__(self, nameDB="zxcDB_StockReturns_Rank", dir=""): #初始根目录信息 if (dir == ""): strDir, strName = myIO.getPath_ByFile(__file__) self.Dir_Base = os.path.abspath(os.path.join(strDir, "../../..")) self.Dir_DataDB = self.Dir_Base + "/Data/DB_Data/" myIO.mkdir(self.Dir_DataDB, False) super().__init__(nameDB, self.Dir_DataDB, False)
def __init__(self, dir=""): #初始根目录信息 if (dir == ""): strDir, strName = myIO.getPath_ByFile(__file__) self.Dir_Base = os.path.abspath(os.path.join(strDir, "../../..")) self.Dir_DataDB = self.Dir_Base + "/Data/DB_Bill/" myIO.mkdir(self.Dir_DataDB, False) else: self.Dir_DataDB = dir self._Init() #初始参数信息等
def __init__(self, usrID="zxcStockAppetites", dir=""): self.usrID = usrID #当前账单归属用户 self.usrDB = {} #当前账包信息集 self.dir = dir #初始根目录信息 if (self.dir == ""): strDir, strName = myIO.getPath_ByFile(__file__) self.dirBase = os.path.abspath(os.path.join(strDir, "..")) self.dir = self.dirBase + "/Data/DB_Trade/Stock_Appetites/" myIO.mkdir(self.dir, False) self._Init_DB(self.dir + usrID + ".csv") #初始参数信息等
def Init(self, dir="", pathPicDir=""): if (dir == ""): strDir, strName = myIO.getPath_ByFile(__file__) self.dirBase = os.path.abspath(os.path.join(strDir, "..")) else: self.dirBase = dir #初始根目录信息 self.dirSetting = self.dirBase + "/Setting/" self.dirData = self.dirBase + "/Data/" if (pathPicDir == ""): pathPicDir = self.dirData self.dirPic = pathPicDir + "Pic/" myIO.mkdir(self.dirPic, False) myIO.mkdir(self.dirPic + "Temps", False, True)
def SwapData_BackUp(self, path, dir=""): fileName = myIO.getFileName(path, False) if (dir == ""): dir = self.dirSwap_back destDir = dir + "/" + fileName[len(self.tagName) + 1:len(self.tagName) + 11] try: myIO.mkdir(destDir, False, False) if (os.path.exists(destDir + "/" + fileName) == False): myIO.copyFile(path, destDir, fileName, False) if (os.path.exists(destDir + "/" + fileName)): os.remove(path) except: pass
def __init__(self, dbName='zxcDB_IOTs', dir=""): #初始根目录信息 if (dir == ""): strDir, strName = myIO.getPath_ByFile(__file__) self.Dir_Base = os.path.abspath(os.path.join(strDir, "..")) self.Dir_DataDB = self.Dir_Base + "/Data/DB_Iot/Iots/" myIO.mkdir(self.Dir_DataDB, False) super().__init__(dbName, self.Dir_DataDB, True) #固定字段 self.Add_Fields([ '设备编号', '设备名称', '设备类型', '设备状态', '通讯地址', '用户名', '用户编号', '地址', '坐标X', "坐标Y", '日期', '备注' ], [ 'string', 'string', 'string', 'string', 'string', 'string', 'string', 'string', 'string', 'string', 'datetime', 'string' ], [])
def __init__(self, nameDB = "zxcDB", dir = "", oneValid = False, params = {"hasAliaName": False}, initAuto = True): self.dir = dir #库表路径 self.nameDB = nameDB #库表名 self.fields = OrderedDict() #库表字段信息 self.fields_index = [] #库表字段-索引信息 self.rows = OrderedDict() #库表行数据集(带编号) self.indexs = {} #索引集 self.oneValid = oneValid #是否只有一条记录有效 self.params = params #初始根目录信息 if(self.dir == ""): strDir, strName = myIO.getPath_ByFile(__file__) self.dirBase = os.path.abspath(os.path.join(strDir, "..")) self.dir = self.dirBase + "/Data/DB_Data/" myIO.mkdir(self.dir, False) if(initAuto): self._Init_DB(self.dir + nameDB + ".csv" ) #初始参数信息等
def __init__(self, host=""): # 获取session对象(操作对象是浏览器,而不是html页面),用于处理动态变化的cookie(有cookie的就用session) self._webHost = host self._webCookies = {} self._webSession = requests.Session() #构造Session self._webImg_ind = 0 #图片下载序号,避免重复 self._Init_Iots() #初始物联网对象集 self._Init_ctrlState() #初始IOT状态集 #初始根目录信息 strDir, strName = myIO.getPath_ByFile(__file__) self._Dir_Base = os.path.abspath(os.path.join(strDir, "..")) self._Dir_Image = self._Dir_Base + "/Temps/Images" self._Dir_Image = myIO.checkPath(self._Dir_Image) myIO.mkdir(self._Dir_Image, False, True) #覆盖 #命令任务状态监测线程启动 self.isRuning = False self._iotCmds = {} #待执行命令集 self._iotCmds_ok = {} #已执行命令集(含失败) self.Start()
def Logion(self, bSave=True, bSave_HeadImg=False): #二维码路径组装 pathPic = self.dirPic + "QR.png" patStatusStorage = self.dirData + 'zxcWeixin.pkl' #登录微信网页版(二维码扫码) myDebug.Print('登陆验证中...') itchat.auto_login(hotReload=True, enableCmdQR=False, statusStorageDir=patStatusStorage, picDir=pathPic, qrCallback=None, loginCallback=self._Logioned, exitCallback=self._LogionOuted) #获取所有好友信息 #friends = itchat.get_friends() friends = itchat.get_friends(update=True)[0:] # 核心:得到frieds列表集,内含很多信息 groups = itchat.get_chatrooms(update=True) #获取自己的UserName self.usrFriends = friends self.usrName = friends[0]['UserName'] self.usrName_Alias = friends[0]['NickName'] gol._Set_Value('zxcWx_usrName', self.usrName) gol._Set_Value('zxcWx_usrName_Alias', self.usrName_Alias) myDebug.Print(" --授权微信用户为:" + self.usrName_Alias + self.usrName) if (True): #记录为文件格式,便于其他识别 dictUsr = { 'UserName': self.usrName, 'NickName': self.usrName_Alias } myIO.Save_File(self.dirData + 'zxcWeixin.cache', str(dictUsr), True, True) #更新用户信息(回复消息处理工厂对象类) self.wxReply._Init(self.usrName, self.usrName_Alias) #消息发送测试 #self.Send_Msg("", "茶叶一主号", "测试消息1", "SHARING", 0) #self.Send_Msg("", "测试", "测试消息22", "TEXT", 1) #self.Send_Msg("", "股票行情监测群", "测试消息33", "TEXT", 1) #self.Send_Msg("", "filehelper", "/root/Public/myPrjs/zxcProj/src/Zxc.Python/zxcPy.Weixin/Data/Pic/Temps/191008-203316.png", "Image", 1) #将friends列表存下来,看看内容 if (bSave): #创建文件夹用于装载所有好友头像 self.dirPic_Head = self.dirPic + "Head/" + self.usrName_Alias + "/" myIO.mkdir(self.dirPic_Head, False) #创建主信息文件 self.dirFriends = self.dirData + "Firends" + "/" myIO.mkdir(self.dirFriends, False) w = open(self.dirFriends + self.usrName_Alias + "_friends", 'a', encoding='utf-8', errors='ignore') #循环写入所有 num = 0 for user in friends: w.write(str(user)) #用户图像 if (bSave_HeadImg): img = itchat.get_head_img(userName=user["UserName"]) fileImage = open( self.dirPic_Head + "/" + str(num) + ".jpg", 'wb') fileImage.write(img) fileImage.close() num += 1 #得到user目录下的所有文件,即各个好友头像 pics = os.listdir(self.dirPic_Head) numPic = len(pics) myDebug.Print(" --微信好友图像数:" + str(numPic) + "\n")
pNotes = mySetting_Note._Get_Notes_(pathNote) nNotes = len(pNotes) if (nNotes < 1): exit() else: #日志填写--循环所有日志记录 for i in range(0, nNotes): pNote = pNotes[i] #条用添加日报 myWebFun_gsafety.__add_日报_byNote__(clsWeb, pNote) #写入日志记录 tTime_Day = time.strptime(pNote.Time, "%Y-%m-%d %H:%M") dirNote_Now = dirNotes + "/" + time.strftime( "%Y", tTime_Day) + "/" + time.strftime("%m", tTime_Day) + "月日志/" myIO.mkdir(dirNote_Now) pathNote2 = dirNote_Now + time.strftime( "%Y-%m-%d", tTime_Day) + ".md" #Note_Now配置文件路径,py脚本上级目录 print("备份日志:" + pathNote2) mySetting_Note._Write_Note_(pathNote2, pNotes[i]) #检索--模糊 #print(len(pDict)) #pDict2 = myWebFun_gsafety_prj.__get_prj__('核事故应急关键技术研究') #print(pDict2) exit()
def Init_LogDir(self, dir): self.dirLog = dir myIO.mkdir(self.dirLog, False)
def companysQuery_save(): #载入配置 companyID = request.args.get('companyID', "") companyName = request.args.get('companyName', "") companyInStreet = request.args.get('companyInStreet', "") companyInVillage = request.args.get('companyInVillage', "") companyAdrr = request.args.get('companyAdrr', "") companyScale = request.args.get('companyScale', "") companySpecialcase = request.args.get('companySpecialcase', "") companyManangeclass = request.args.get('companyManangeclass', "") companyContacts = request.args.get('companyContacts', "") companyContacts = request.args.get('companyContacts', "") #组装筛选条件 fliter = "" if (companyID != ""): fliter += " && companyID == " + companyID if (companyName != ""): fliter += " && companyName %like% " + companyName if (companyInStreet != ""): fliter += " && companyInStreet == " + companyInStreet if (companyInVillage != ""): fliter += " && companyInVillage == " + companyInVillage if (companyAdrr != ""): fliter += " && companyAdrr == " + companyAdrr if (companyScale != ""): fliter += " && companyScale == " + companyScale if (companySpecialcase != ""): fliter += " && companySpecialcase == " + companySpecialcase if (companyManangeclass != ""): fliter += " && companyManangeclass == " + companyManangeclass if (companyContacts != ""): fliter += " && companyContacts == " + companyContacts if (fliter != ""): fliter = fliter[4:] #筛选 res = {"success": 1, "data": "", "msg": ""} try: dbCompany = gol._Get_Value('dbCompany') totalCount, pCompanys = dbCompany.getCompanys(param=fliter, isDel=False, page=1, per_page=99999999) if (totalCount == 0): res['success'] = 0 res['msg'] = str(err) return myData_Json.Trans_ToJson_str(res) #保存属性信息 nameUUID = myIO.create_UUID() dirTemp = myIO.checkPath(appWeb.baseDir + "static/data/temp/temp_" + nameUUID + "/") myIO.mkdir(dirTemp, True, True) nameFile = "企业信息数据表" if (totalCount == 1): nameFile = pCompanys[0]['companyName'] nameFile = nameFile + "_" + nameUUID dbCompany.Save_as_csv(dirTemp + nameFile + ".csv", pCompanys, True) #保存相关图片 files = [] newfiles = [] imgSrcdir = appWeb.baseDir dictImgs = { "imgName_1": "图片_相关部门证明", "imgName_2": "图片_正门照片", "imgName_3": "图片_生产车间照片", "imgName_4": "图片_营业执照注销", "imgName_5": "图片_断水断电证明", "imgName_6": "图片_执法笔录", } for x in pCompanys: #文件夹保存图片 dirCompany = dirTemp + x['companyName'] + "/" for name in dictImgs: nameImg = dictImgs[name].replace("图片_", "") filesImg = x[name].split(';') targetDir = dirCompany + nameImg # 拷贝文件到文件夹 ind = 0 for xx in filesImg: ind += 1 if (xx == ''): continue pathDest = myIO.copyFile(imgSrcdir + xx, targetDir, nameImg + "_" + str(ind)) files.append(pathDest) newfiles.append(pathDest.replace(dirTemp, "")) files.append(dirTemp + nameFile + ".csv") newfiles.append(nameFile + ".csv") #压缩文件 zip_name = nameFile zip_path = appWeb.baseDir + "static/data/Companys/" #if(myIO.Save_Files_zip(files, newfiles, zip_path, zip_name)): if (myIO.Save_Floders_zip(dirTemp, zip_path, zip_name)): res['filename'] = zip_name + '.zip' res['filefloder'] = "Companys" res['totalCount'] = totalCount else: res['success'] = 0 res['msg'] = str(err) myIO.deldir(dirTemp) except Exception as err: res['success'] = 0 res['msg'] = str(err) return myData_Json.Trans_ToJson_str(res)
def split_audio_on_silence(path, silence_thresh=-50, min_silence_len=1000, length_limit=60, keep_silence=0, abandon_chunk_len=500, joint_silence_len=1000, out_debug=False, save_path=''): # 按句子停顿,拆分成长度不大于1分钟录音片段 if (out_debug): print('开始拆分(如果录音较长,请耐心等待)\n', ' *' * 30) dtStart = datetime.datetime.now() audio_segment = AudioSegment.from_wav(path) chunks = split_chunks_on_silence(audio_segment, silence_thresh=silence_thresh, min_silence_len=min_silence_len, length_limit=length_limit, keep_silence=keep_silence) if (out_debug): print('拆分结束,返回段数:', len(chunks), '\n', ' *' * 30) # 放弃长度小于0.5秒的录音片段 for i in list(range(len(chunks)))[::-1]: if len(chunks[i]) <= abandon_chunk_len: chunks.pop(i) if (out_debug): print('取有效分段:', len(chunks)) # 时间过短的相邻段合并,单段不超过设定秒 chunks_adjust = [] if (len(chunks) > 1): length_limit = 60 * 1000 temp = AudioSegment.empty() silence = AudioSegment.silent(duration=joint_silence_len) nsegmental = 0 for chunk in chunks: length = len(temp) + len(silence) + len(chunk) # 预计合并后长度 if length < length_limit: # 小于1分钟,可以合并 temp += silence + chunk # 单独一段的话会多段间隔 else: # 大于1分钟,先将之前的保存,重新开始累加 chunks_adjust.append(temp) temp = chunk else: chunks_adjust.append(temp) if (out_debug): print('合并后段数:', len(chunks_adjust)) else: # 直接返回 if (out_debug): print('唯一段,小于限制长度,无需分割。') return [path] # 保存所有分段 paths = [] if (True): # 保存前处理一下路径文件名 if (save_path == ''): save_path = "%s/chunks/%s" % (os.path.dirname(path), os.path.basename(path)) myIO.mkdir(os.path.dirname(save_path), False) namef, namec = os.path.splitext(save_path) namec = namec[1:] # 保存所有分段 breaks = len(chunks_adjust) for i in range(breaks): new = chunks_adjust[i] save_name = '%s_%04d.%s' % (namef, i, namec) # 生成保存路径 new.export(save_name, format=namec) # 保存文件 if (out_debug): print('%04d' % i, len(new), os.path.basename(path)) paths.append(save_name) if (out_debug): print('保存完毕') if (out_debug): print("==> split audio on silence end @ %s, 耗时 %s 秒" % (os.path.basename(path), str((datetime.datetime.now() - dtStart).seconds))) return paths if (out_debug): print("==> split audio on silence failed @ %s, 耗时 %s 秒" % (os.path.basename(path), str((datetime.datetime.now() - dtStart).seconds))) return paths