How to use delete_target method in autotest

Best Python code snippet using autotest_python

cut_segmentation_mod.py

Source:cut_segmentation_mod.py Github

copy

Full Screen

1import numpy as np2import matplotlib.pyplot as plt3import cv24import os5import shutil6from logging import getLogger, StreamHandler, DEBUG7from file_io import write_csv89# 閾値の設定10CUT_THRESHOLD = 83 # カット分割時の閾値11CUT_BETWEEN_THRESHOLD = 90 # カット間フレームの削除時の閾値12HIST_THRESHOLD = 0.8 # ヒストグラムインタセクション(HI)の類似度比較時の閾値13FLASH_THRESHOLD = 0.65 # フラッシュ検出時のHIの類似度比較時の閾値14EFFECT_THRESHOLD = 0.8 # エフェクト検出時のHIの類似度比較時の閾値1516# ログ設定17logger = getLogger(__name__)18handler = StreamHandler()19handler.setLevel(DEBUG)20logger.setLevel(DEBUG)21logger.addHandler(handler)22logger.propagate = False2324def dest_folder_create(dest_path):25 """26 保存先フォルダを作成する関数2728 Parameters29 ----------30 dest_path : str31 保存先フォルダのパス32 """33 # 保存先フォルダの作成34 # 既に存在する場合は削除35 if os.path.exists(dest_path):36 shutil.rmtree(dest_path) # フォルダ削除37 os.mkdir(dest_path) # 保存先フォルダの作成3839def MSE(diff): 40 """41 平均二乗誤差(MSE)を行って、結果を帰す関数4243 diff = y[i+1] - y[i] (差分画像)44 MSE = 1/n Σ (diff)^2 (平均二乗誤差)4546 Parameters47 ----------48 diff : numpy.ndarray49 平均二乗誤差を求めたいデータ5051 Returns52 -------53 numpy.float6454 カット検出点(フレーム番号)のリスト 55 """56 return np.mean(np.square(diff))5758def target_delete(cut_point, delete_target):59 """60 カット点の修正時に、不要になったフレームを削除する関数6162 Parameters63 ----------64 cut_point : list65 カット点のフレーム番号リスト6667 delete_target : list68 不要なフレーム番号リスト6970 Returns71 -------72 cut_point : list73 カット点のフレーム番号リスト(削除後)74 """75 delete_target = list(set(delete_target)) # 重複を排除7677 # 削除対象のカット点を削除78 for i in delete_target:79 cut_point.remove(i) # 削除80 81 return cut_point8283def cut_between_frame_delete(cut_point, diff_images):84 """85 カット間フレームを削除する関数86 カット間フレーム = カットとカットに稀出来る不要なフレーム8788 [削除の理由]89 カット点と誤検出している状態のため削除する必要がある90 [方法]91 必ず正解のカット点の1つ後ろのフレームに出来るため、連続なカット点を探る(削除候補)92 カット間フレームの前後のフレームの差分画像をMSEにかける93 その結果が閾値以下(ほとんど同じ)ならカット間フレームであり、削除対象94 カット間フレームを削除9596 Parameters97 ----------98 cut_point : list99 カット点のフレーム番号リスト100101 diff_images : numpy.ndarray102 隣接フレーム間の差分画像103104 Returns105 -------106 cut_point : list107 カット点(のフレーム番号リスト)108 """109 diff = np.diff(np.array(cut_point)).tolist() # 前後フレームのフレーム番号で差異を取る(操作のために一度型変換)110 diff_index = [i for i, diff in enumerate(diff) if diff == 1] # 差異が1フレーム(連続なカット点)の添え字を取得111 remove_candidate = [cut_point[i+1] for i in diff_index] # 削除候補112 113 delete_target = [] # 削除対象114 for i in remove_candidate:115 # 差分画像同士のMSEが閾値以下のとき削除対象116 if MSE(diff_images[i-1] - diff_images[i]) <= CUT_BETWEEN_THRESHOLD:117 delete_target.append(i)118119 cut_point = target_delete(cut_point, delete_target) # 削除対象の全フレームを削除120 121 return cut_point122123def create_mask_img(img):124 """125 マスク画像を作成する関数126 輝度ヒストグラムを求める際に使用127128 Parameters129 ----------130 img : numpy.ndarray131 マスク画像を重ねたい画像132133 Returns134 -------135 mask : numpy.ndarray136 カット検出点(フレーム番号)のリスト 137 """138 width, height = img.shape[:2] # 幅、高さ139 140 w, h = img.shape[:2]141 mask = np.zeros((width, height), np.uint8) # 初期化142 mask[w//5:w//5*4, h//5:h//5*4] = 255 # 中央だけ通すマスク画像143144 return mask145146def color_histogram_comp(img1, img2, THRESHOLD, need_mask=False):147 """148 2つの画像から輝度ヒストグラムの類似度を算出する関数149 類似度が3つ以上閾値を超えたとき削除対象として比較結果を返す150151 Parameters152 ----------153 img1 : numpy.ndarray154 比較画像1の画像データ155156 img2 : numpy.ndarray157 比較画像2の画像データ158 159 THRESHOLD : float160 使用する閾値161162 need_mask : bool, default False163 マスク画像を適用するかどうか164165 Returns166 -------167 bool168 比較結果(削除対象かどうか)169 """170 # 画像データからRGBの3色を取り出す171 b1, g1, r1 = img1[:,:,0], img1[:,:,1], img1[:,:,2]172 b2, g2, r2 = img2[:,:,0], img2[:,:,1], img2[:,:,2]173174 # マスク画像を適用する場合175 if need_mask:176 mask = create_mask_img(img1) # 中央だけを通すマスク画像を作成177 # 比較画像1のRed, Green, Blue、Gray の4つのヒストグラム作成する178 hist1_r = cv2.calcHist([r1],[0],mask,[256],[0,256])179 hist1_g = cv2.calcHist([g1],[0],mask,[256],[0,256])180 hist1_b = cv2.calcHist([b1],[0],mask,[256],[0,256])181 hist1_k = cv2.calcHist([img1],[0],mask,[256],[0,256])182 # 比較画像2も同様に作成183 hist2_r = cv2.calcHist([r2],[0],mask,[256],[0,256])184 hist2_g = cv2.calcHist([g2],[0],mask,[256],[0,256])185 hist2_b = cv2.calcHist([b2],[0],mask,[256],[0,256])186 hist2_k = cv2.calcHist([img2],[0],mask,[256],[0,256])187 else:188 hist1_r = cv2.calcHist([r1],[0],None,[256],[0,256])189 hist1_g = cv2.calcHist([g1],[0],None,[256],[0,256])190 hist1_b = cv2.calcHist([b1],[0],None,[256],[0,256])191 hist1_k = cv2.calcHist([img1],[0],None,[256],[0,256])192193 hist2_r = cv2.calcHist([r2],[0],None,[256],[0,256])194 hist2_g = cv2.calcHist([g2],[0],None,[256],[0,256])195 hist2_b = cv2.calcHist([b2],[0],None,[256],[0,256])196 hist2_k = cv2.calcHist([img2],[0],None,[256],[0,256])197198 # ヒストグラムインタセクション で比較して類似度を出す199 similarity_hist_r = cv2.compareHist(hist1_r, hist2_r, cv2.HISTCMP_INTERSECT) / np.sum(hist1_r)200 similarity_hist_g = cv2.compareHist(hist1_g, hist2_g, cv2.HISTCMP_INTERSECT) / np.sum(hist1_g) 201 similarity_hist_b = cv2.compareHist(hist1_b, hist2_b, cv2.HISTCMP_INTERSECT) / np.sum(hist1_b)202 similarity_hist_k = cv2.compareHist(hist1_k, hist2_k, cv2.HISTCMP_INTERSECT) / np.sum(hist1_k) 203204 exceed_cnt = 0 # 閾値を超えた個数205206 if similarity_hist_r >= THRESHOLD:207 exceed_cnt += 1208 if similarity_hist_g >= THRESHOLD:209 exceed_cnt += 1210 if similarity_hist_b >= THRESHOLD:211 exceed_cnt += 1212 if similarity_hist_k >= THRESHOLD:213 exceed_cnt += 1214215 # 閾値を超える個数が3以上の時、削除対象とする216 if exceed_cnt >= 3:217 return True218 else:219 return False220 221def incorrect_cut_point_delete_by_color_histogram(cut_point, frames):222 """223 輝度ヒストグラム(カラーヒストグラム)による誤ったカット点の削除を行う関数224225 [削除の理由]226 動きの激しい時に大量かつ連続でカット点を取ってしまう問題が生じているため227 [方法]228 カット点の画像データから Red, Green, Blue、Gray の4つのヒストグラムを作成する229 ヒストグラムの作成時には、中央のみを通すマスク画像を使用する(中央部分のみの輝度ヒストグラム)230 1つ後ろのカット点に対しても同様に4つのヒストグラムを作成して2つのヒストグラムを比較する231 比較には、ヒストグラムインタセクション を使って、類似度を出す232 類似度(高いほど類似している)が閾値以上の時(※)カット点から削除233 ※RGBとGray の4つのヒストグラムの類似度が3つ以上閾値を超える時234235 カット点同士の類似度が高い → 誤ったカット点の可能性が高い(カット点に同じような画像は基本的にないため)236237 ヒストグラムインタセクション D = Σ min(h[i] - h[i+1])  h はヒストグラム238 239 具体的な処理のコードはサブ関数である[color_histogram_comp]に記載240241 Parameters242 ----------243 cut_point : list244 カット点(のフレーム番号リスト)245246 frames : numpy.ndarray247 フレームデータ(動画の全画像データ)248249 Returns250 -------251 cut_point : list252 カット間フレームを削除した後のカット点253 """254 cut_frame = [frames[i] for i in cut_point] # カット点の画像データ(フレーム)255 delete_target = [] # 削除対象256257 for i in range(len(cut_frame)-1):258 isdelete = color_histogram_comp(cut_frame[i], cut_frame[i+1], HIST_THRESHOLD, need_mask=True) # 2つの画像の比較結果(削除対象かどうか)259260 # 削除対象の時261 if isdelete:262 delete_target.append(cut_point[i])263264 cut_point = target_delete(cut_point, delete_target) # 削除対象の全フレームを削除265 266 return cut_point267268def flash_frame_delete(cut_point, frames):269 """270 フラッシュを検出して、該当カット点を削除する関数271 [方法]272 次のカット点とのフレーム差が5フレーム以内のカット点のみ検査する273 次のカット点を含めて幅3フレーム分の画像を取得する 274 取得した複数の画像の各画素の最小値を取った画像を作成する275 該当カット点の画像と作成した最小画素の画像で輝度ヒストグラムの類似度を算出276 類似度が閾値以上の時、フラッシュの可能性があるのでカット点から削除277 278 フラッシュは中央以外の場所でも起きるため、ヒストグラム作成時のマスク画像は適用しない279280 Parameters281 ----------282 cut_point : list283 カット点(のフレーム番号リスト)284285 frames : numpy.ndarray286 フレームデータ(動画の全画像データ)287288 Returns289 -------290 cut_point : list291 カット間フレームを削除した後のカット点292 """293 delete_target = [] # 削除対象294 for i in range(len(cut_point)-1):295 # 次のカット点とのフレーム差が5フレーム以内の時296 if abs(cut_point[i] - cut_point[i+1]) <= 5: 297 # 3フレーム分の画像を取得298 range_images = [] 299 for at in range(3):300 # 最後のフレーム番号を超える場合は、最後のフレームにする301 if cut_point[i+1] + at >= cut_point[-1]:302 range_images.append(frames[cut_point[-1]]) 303 else: 304 range_images.append(frames[cut_point[i+1] + at]) 305 # 比較画像の作成306 prev_frame = frames[cut_point[i]] # 比較対象1307 next_frame = np.min(range_images, axis=0) # 比較対象2308309 isdelete = color_histogram_comp(prev_frame, next_frame, FLASH_THRESHOLD, need_mask=False) # 2つの画像の比較結果(削除対象かどうか)310311 # 削除対象の時312 if isdelete:313 delete_target.append(cut_point[i])314 delete_target.append(cut_point[i+1])315316 cut_point = target_delete(cut_point, delete_target) # 削除対象の全フレームを削除317 318 return cut_point319320def effect_frame_delete(cut_point, frames):321 """322 エフェクトを検出して、該当カット点を削除する関数323 [方法]324 次のカット点とのフレーム差が5フレーム以内のカット点のみ検査する325 次のカット点から幅5フレーム分の画像を取得する326 該当カット点の画像と取得した5つの画像で輝度ヒストグラムの類似度を算出(5回分)327 類似度が閾値以上の時、エフェクトの可能性があるのでカット点から削除328 329 Parameters330 ----------331 cut_point : list332 カット点(のフレーム番号リスト)333334 frames : numpy.ndarray335 フレームデータ(動画の全画像データ)336337 Returns338 -------339 cut_point : list340 カット間フレームを削除した後のカット点341 """342 delete_target = []343 for i in range(len(cut_point)-1):344 if abs(cut_point[i] - cut_point[i+1]) <= 5: 345 for at in range(1, 6): # 5フレーム分346 prev_frame = frames[cut_point[i]] # 比較対象1347348 # 最後のフレーム番号を超える場合は、最後のフレームにする349 if cut_point[i+1] + at >= cut_point[-1]:350 next_frame = frames[cut_point[-1]] # 比較対象2351 else: 352 next_frame = frames[cut_point[i+1] + at] # 比較対象2353354 isdelete = color_histogram_comp(prev_frame, next_frame, EFFECT_THRESHOLD, need_mask=False) # 2つの画像の比較結果(削除対象かどうか)355356 # 削除対象の時357 if isdelete:358 delete_target.append(cut_point[i])359 delete_target.append(cut_point[i+1])360361 delete_target = list(set(delete_target)) # 重複を削除362 cut_point = target_delete(cut_point, delete_target) # 削除対象の全フレームを削除363 364 return cut_point365366def read_video_data(input_video_path):367 """368 動画を読み込み、フレームデータと動画情報を抽出する関数369370 Parameters371 ----------372 input_video_path : str373 動画の入力パス 374375 Returns376 -------377 frames : numpy.ndarray378 フレームデータ(動画の全画像データ)379 380 video_info : list 381 動画データ [fps, width, height]382 """383 # --------------------------------------------------384 # 動画の読み込み385 # --------------------------------------------------386 cap = cv2.VideoCapture(input_video_path)387 # ビデオキャプチャーが開けていない場合、例外を返す388 if cap.isOpened() is False:389 raise ValueError('読み込みエラー : 動画ID ' + input_video_path + 'が上手く読み取れません。')390 391 fps = cap.get(cv2.CAP_PROP_FPS) # FPS392 width = cap.get(cv2.CAP_PROP_FRAME_WIDTH) # 幅393 height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT) # 高さ394 frame_count = cap.get(cv2.CAP_PROP_FRAME_COUNT) # 総フレーム数395 sec = frame_count / fps # 秒数396 397 # --------------------------------------------------398 # フレーム毎の画像情報をリストに格納399 # --------------------------------------------------400 n_frames = int(frame_count) # 総フレーム数 401 frames = []402 while True:403 ret, frame = cap.read()404 # 最後まで取得出来なかった場合、そこまでを総フレームとして更新405 if not ret:406 #n_frames = int(cap.get(cv2.CAP_PROP_POS_FRAMES))407 break408409 frames.append(frame)410 if len(frames) == n_frames:411 break412413 if cap.isOpened():414 cap.release()415416 frames = [cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) for frame in frames] # 処理のため、BGRからRGBにする417 video_info = [fps, width, height] # 戻り値用の動画情報をまとめる418419 return frames, video_info420421def cut_point_detect(frames):422 """423 カット点を検出して、返す関数424 [手順]425 1. 隣接フレーム間で差分画像を作成426 2. 変化割合を算出427 3. 変化割合が閾値以上の時、カット点として抽出428 4. 段階的なカット点の修正429 4-1 カット間フレーム(不要フレーム)を削除430 4-2 輝度ヒストグラムで誤ったカット点を削除431 4-3 フラッシュ検出による誤ったカット点を削除432 4-4 エフェクト検出による誤ったカット点を削除433434 Parameters435 ----------436 frames : numpy.ndarray437 フレームデータ(動画の全画像データ) 438439 Returns440 -------441 cut_point : list442 カット検出点(フレーム番号)のリスト 443444 """445 # --------------------------------------------------446 # 1. 隣接フレーム間で差分画像を作成447 # --------------------------------------------------448 diff_images = [aft - bef for bef, aft in zip(frames, frames[1:])] # 差分画像449450 # --------------------------------------------------451 # 2. 変化割合を算出452 # --------------------------------------------------453 diff_rates = [MSE(d) for d in diff_images] # 差分画像のMSEを変化割合とする454 455 # --------------------------------------------------456 # 3. 変化割合が閾値以上の時、カット点として抽出する 457 # --------------------------------------------------458 cut_point = [] # カット点のフレーム番号リスト459 for i in range(len(diff_images)):460 # 変化割合が閾値を以上の時461 if diff_rates[i] >= CUT_THRESHOLD: 462 cut_point.append(i) # リストに追加463464 # --------------------------------------------------465 # 4. 段階的なカット点の修正466 #--------------------------------------------------467 # 4-1 カット間フレーム(不要フレーム)を削除468 cut_point = cut_between_frame_delete(cut_point, diff_images)469470 # 4-2 輝度ヒストグラムの類似度による誤ったカット点を削除471 cut_point = incorrect_cut_point_delete_by_color_histogram(cut_point, frames) 472473 # 4-3 フラッシュ検出による誤ったカット点を削除474 cut_point = flash_frame_delete(cut_point, frames)475476 # 4-4 エフェクト検出による誤ったカット点を削除477 cut_point = effect_frame_delete(cut_point, frames)478 479 cut_point.append(len(frames) - 1) # 動画の最後のフレームインデックスを追加480481 return cut_point482 483def graph_save(data, dest_path):484 """485 変化割合のグラフを保存する関数486487 Parameters488 ----------489 data : numpy.ndarray490 変化割合491492 dest_path : str493 保存先フォルダのパス494 """495 fig = plt.figure(figsize=(10, 5))496 plt.plot(data) 497 plt.title('Graph of Cut Change Detection') # タイトル498 plt.xlabel('frame') # X軸ラベル499 plt.ylabel('Diff Rate') # Y軸ラベル500 plt.grid(True) # グリッドあり501 plt.axhline(85, color='red') # カットするラインを描画502 #plt.show() # グラフ描画503 504 plt.savefig(dest_path + '\\change_rate_graph.jpg') # 保存505506def cut_save(video_id, cut_point, frames, video_info, dest_path):507 """508 動画を分割して保存する関数509510 Parameters511 ----------512 video_id : str513 動画ID 514515 cut_point : list516 カット検出点(フレーム番号)のリスト517 518 frames : numpy.ndarray519 フレームデータ(動画の全画像データ) 520 521 video_info : list 522 動画データ [fps, width, height]523 524 dest_path : str525 保存先フォルダのパス526 """527 # --------------------------------------------------528 # カット分割・保存529 # --------------------------------------------------530 fps, width, height = video_info # 動画情報の展開531532 #fourcc = cv2.VideoWriter_fourcc('m','p','4','v') # 動画の保存形式533 fourcc = 0x00000021 # 動画の保存形式(H264形式でエンコード) 2021/2/12 変更534 writer = [] # カット書き込み用のリスト535 begin = 0 # カット最初のフレーム536537 frames = [cv2.cvtColor(frame, cv2.COLOR_RGB2BGR) for frame in frames] # RGBからBGRに戻す(戻さないと色が反転したまま保存される)538539 cut_count = len(cut_point) # カット数540 for i in range(cut_count):541 writer.append(cv2.VideoWriter(dest_path + '\\cut' + str(i+1) + '.mp4', fourcc, fps, (int(width), int(height))))542 for j in range(begin, cut_point[i]+1):543 writer[i].write(frames[j])544 begin = cut_point[i]+1545546 logger.debug(video_id + '_cut1 ~ ' + str(cut_count) + 'を保存しました')547 logger.debug('保存先 : ' + dest_path)548 logger.debug('--------------------------------------------------')549550 # --------------------------------------------------551 # 変化割合グラフを保存552 # --------------------------------------------------553 # diff_images = [aft - bef for bef, aft in zip(frames, frames[1:])] # 差分画像554 # diff_rates = [MSE(d) for d in diff_images] # 差分画像のMSEを変化割合とする555 # graph_save(frames, dest_path)556557def cut_segmentation(files, result_cut_path):558 """559 カット分割を行い、各カットをフォルダに保存する関数560 561 以下の流れで行う562 563 動画IDリストの作成564 カット分割565 保存先フォルダの作成 566 動画の読み込み、フレームデータ,動画情報の抽出567 カット点の検出568 カットの保存569570 Parameters571 ----------572 video_path : str573 入力する動画データのフォルダパス574575 result_cut_path576 カット分割結果を保存するフォルダパス577 """578 # --------------------------------------------------579 # 保存先の中身を初期化580 # --------------------------------------------------581 dest_folder_create(result_cut_path)582583 # --------------------------------------------------584 # 動画IDリストの作成585 # --------------------------------------------------586 #files = os.listdir(video_path) # 動画ファイル名(動画ID)一覧を取得587 video_id_list = files # 一覧から拡張子を削除588 589 # --------------------------------------------------590 # カット分割591 # --------------------------------------------------592 cut_point_list = [] # カット点のリスト593 for video_id in video_id_list:594 input_video_path = video_id # 動画ファイルの入力パス 595 596 # --------------------------------------------------597 # 保存先フォルダの作成598 # --------------------------------------------------599 video_name = os.path.splitext(os.path.basename(video_id))[0] # 動画名(拡張子なし)600 dest_path = os.path.join(result_cut_path, video_name) # 各動画のカット分割結果の保存先601 #dest_path = result_cut_path # 各動画のカット分割結果の保存先602 603 dest_folder_create(dest_path) # フォルダ作成 604 605 # --------------------------------------------------606 # 動画の読み込み、フレームデータと動画情報を抽出607 # --------------------------------------------------608 frames, video_info = read_video_data(input_video_path)609 610 # --------------------------------------------------611 # カット点の検出612 # --------------------------------------------------613 cut_point = cut_point_detect(frames)614 cut_point_list.append(cut_point)615 616 # --------------------------------------------------617 # カット点の情報を使用して、動画を分割して保存618 # --------------------------------------------------619 cut_save(video_id, cut_point, frames, video_info, dest_path)620 621 # --------------------------------------------------622 # カット点のリストをCSVファイルに保存(後の処理で再使用するため)623 # --------------------------------------------------624 # TODO ハードコピーやめる625 write_csv([video_id_list, cut_point_list], r'C:\Users\fukuyori\Scene-Analyzer\resources\app\python\temp\cut_point.csv')626627 ...

Full Screen

Full Screen

脚本集合.py

Source:脚本集合.py Github

copy

Full Screen

...64# 删除活动数据 65def delete_activity():66 _activity = mongo.re_pos_int(input("删什么活动:1.星星银行,2.宝箱激励,3.娃娃机,4.限时活动,5.玩具之家,6组队任务,7.迎新会> "))67 if _activity == 1:68 delete_target("inspire_bank_user")69 elif _activity == 2:70 delete_target("inspire_user_job")71 elif _activity == 3:72 delete_target("prize_claw_user", "prize_claw_team", "prize_claw_not_full_team")73 elif _activity == 4:74 delete_target("time_limit_user", "time_limit_rank_score", "time_limit_rank_backup", "time_limit_rank", "time_limit_garden_war")75 elif _activity == 5:76 delete_target("toy_user_job")77 elif _activity == 6:78 delete_target("new_mission_user")79 elif _activity == 7:80 delete_target("new_task_user")81 else:82 _activity = mongo.re_pos_int(input("输错了,重新输入> "))83 Del_data(_activity)84 85 pass86def delete_target(COLLECTION, *depends):87 db_coll = db[COLLECTION]88 _id = input("删哪个ID> ")89 target = {'_id': mongo.re_pos_int(_id)}90 result_find = db_coll.find_one(target)91 # print(db_coll.find()[0])92 if result_find:93 result = db_coll.delete_one(target)94 print("删除成功")95 time.sleep(1)96 else:97 print("未找到此ID,重新输入> ")98 delete_target(COLLECTION)99 for depend in depends:100 db_coll = db[depend]101 depend_find = db_coll.find_one(target)102 # 删除排行榜等表单中此UserID的相关数据(找到了就删,找不到进娃娃机逻辑)103 # 不够严谨,限时活动有的表单没找到东西也会走elif104 if depend_find:105 result = db_coll.delete_one(target)106 # 娃娃机活动,teamID=日期+UserID,删除team中个人信息107 # 'b'字段是每个id的队伍id108 elif result_find['b'] != 0:109 # 队伍相关信息110 target_team = {'_id': result_find['b']}111 find_team = db_coll.find_one(target_team)112 # 能找到队伍就是娃娃机活动,找不到就是其它不用动的活动数据(比如限时活动其它depends)...

Full Screen

Full Screen

删除活动数据.py

Source:删除活动数据.py Github

copy

Full Screen

2import time3from mongo import mongodb4from mongo import re_pos_int5db = mongodb()6def delete_target(COLLECTION, *depends):7 db_coll = db[COLLECTION]8 _id = input("删哪个ID> ")9 target = {'_id': re_pos_int(_id)}10 result_find = db_coll.find_one(target)11 # print(db_coll.find()[0])12 if result_find:13 result = db_coll.delete_one(target)14 print("删除成功")15 time.sleep(1)16 else:17 print("未找到此ID,重新输入> ")18 delete_target(COLLECTION)19 for depend in depends:20 21 db_coll = db[depend]22 depend_find = db_coll.find_one(target)23 # 删除排行榜等表单中此UserID的相关数据(找到了就删,找不到进娃娃机逻辑)24 # 不够严谨,限时活动有的表单没找到东西也会走elif25 if depend_find:26 result = db_coll.delete_one(target)27 # 娃娃机活动,teamID=日期+UserID,删除team中个人信息28 # 'b'字段是每个id的队伍id29 elif result_find['b'] != 0:30 # 队伍相关信息31 target_team = {'_id': result_find['b']}32 find_team = db_coll.find_one(target_team)33 # 能找到队伍就是娃娃机活动,找不到就是其它不用动的活动数据(比如限时活动其它depends)34 if find_team:35 # 一个人一队就删队,否则只删自己36 if isinstance(find_team['a'], dict):37 if len(find_team['a']) != 1:38 del find_team['a'][_id]39 result = db_coll.update_one(target_team, {'$set': find_team})40 else:41 result = db_coll.delete_one(find_team) 42 # 单人则同时再删掉not_full队伍43 elif find_team['a'] == 1:44 result = db_coll.delete_one(find_team)45def Del_data(_activity): 46 if _activity == 1:47 delete_target("inspire_bank_user")48 elif _activity == 2:49 delete_target("inspire_user_job")50 elif _activity == 3:51 delete_target("prize_claw_user", "prize_claw_team", "prize_claw_not_full_team")52 elif _activity == 4:53 delete_target("time_limit_user", "time_limit_rank_score", "time_limit_rank_backup", "time_limit_rank", "time_limit_garden_war")54 elif _activity == 5:55 delete_target("toy_user_job")56 elif _activity == 6:57 delete_target("new_mission_user")58 elif _activity == 7:59 delete_target("new_task_user")60 elif _activity == 8:61 delete_target("camp_war_user")62 else:63 _activity = int(input("输错了,重新输入> "))64 Del_data(_activity)65_activity = int(input("删什么活动:1.星星银行,2.宝箱激励,3.娃娃机,4.限时活动,5.玩具之家,6组队任务,7.迎新会, 8.阵营战> "))...

Full Screen

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run autotest automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful