模板,用於處理資料

2022-09-24 04:30:12 字數 3991 閱讀 5255

import os

from json import load, dumps

from pathlib import path

from traceback import format_exc

from log_color.log_color import logger

from progress.bar import bar

def get_file_list(input_path, file_list):

"""@param input_path:檔案輸入路徑

@param file_list:檔案列表

@return:

"""with os.scandir(input_path) as it:

for entry in it:

if entry.is_file():

elif entry.is_dir():

get_file_list(entry.path, file_list)

class processdata:

def __init__(self, src, dst):

self.src = path(src)

self.dst = path(dst)

if self.dst.exists():

self.logger = logger(name=os.path.join(dst, "$name$.log"))

else:

self.logger = logger(name="$name$.log")

def start(self):

try:

if self.check_path_exist():

self.process_data()

except exception as e:

self.logger.error(f"執行失敗::")

def process_data(self):

json_file_list = [file for file in self.src.rglob("*.json")]

with bar(max=len(json_file_list), suffix='%(index)d/%(max)d in %(elapsed)ds (eta:%(eta_td)s)') as bar:

for file in json_file_list:

try:

output_file = self.dst.joinpath(file.relative_to(self.src))

output_file.parent.mkdir(parents=true, exist_ok=true)

self.convert(file, output_file)

except exception as e:

self.logger.error(f"執行失敗,跳過這個檔案。\n")

finally:

bar.next()

def convert(self, file, output_file):

json_content = self.read_json(file)

result_json = {}

self.generate_json(result_json, output_file)

def check_path_exist(self):

""":return:true/false

"""for input_path in [self.src, self.dst]:

if not input_path.exists() or input_path != "":

self.logger.error(f"不存在或者為空")

return false

return true

@staticmethod

def get_bbox(coordinates):

""":param coordinates: 平台點列表

:return: 返回bbox格式,左上x,y,寬,高

"""x = int(coordinates[0][0])

y = int(coordinates[0][1])

w = int(abs(coordinates[2][0] - x))

h = int(abs(coordinates[2][1] - y))

return [x, y, w, h]

@staticmethod

def get_xys(coordinates):

""":param coordinates:平台點列表

:return:返回[x0,y0,x2,y2]

"""x0 = coordinates[0][0]

y0 = coordinates[0][1]

x2 = coordinates[2][0]

y2 = coordinates[2][1]

return [x0, y0, x2, y2]

def get_coordinates(self, coordinates):

"""@param coordinates:列表

@return:列表

"""if len(coordinates) > 1:

return coordinates

elif len(coordinates) == 1:

return self.get_coordinates(coordinates[0])

def read_json(self, file_path):

"""@param file_path:json檔案路徑

@return:json內容

"""file_json = none

try:

with open(file_path, mode='r', encoding="utf-8") as f:

file_json = load(f)

except exception as e:

self.logger.error(f"讀取失敗:")

finally:

return file_json

def generate_json(self, content_dic, file_path):

"""@param content_dic:字典內容

@param file_path:生成的json檔案路徑

"""try:

with open(file_path, "w", encoding="utf-8") as f:

f.write(dumps(content_dic, indent=4, ensure_ascii=false))

except exception as e:

self.logger.error(f"生成失敗:")

if __name__ == '__main__':

while true:

print("**** start ****")

input_folder = input("請輸入平台標註結果資料夾:").strip("\"")

output_folder = input("請輸入結果儲存資料夾:").strip("\"")

# input_folder = r"f:\task\2022\01\廉博\運動人25點標註\data"

# output_folder = r"f:\task\2022\01\廉博\運動物25點標註\result"

pd = processdata(src=input_folder, dst=output_folder)

if pd.check_path_exist():

pd.start()

else:

continue

print("**** finished ****", end="\r")

c = input("請輸入q(不區分大小寫)回車退出,按其他任意鍵回車繼續:")

if c.lower() == "q":

break

模板用於解耦

一道 c 思考題 std string 的 operator 和 operator 是如何宣告的,如何避免與 iostream 的過度耦合?iostream 和 string 都可以單獨 include 來使用,顯然 iostream 標頭檔案裡不會定義 string 的 和 操作。那麼 strin...

用於實時大資料處理的Lambda架構

如果採用hdfs來儲存資料,我們就可以使用mapreduce來在資料集上構建查詢的view。batch layer的工作可以簡單的用如下偽碼表示 該工作看似簡單,實質非常強大。任何人為或機器發生的錯誤,都可以通過修正錯誤後重新計算來恢復得到正確結果。對view的理解 view是乙個和業務關聯性比較大...

幾個用於除錯Django模板的標籤

django模板有諸多限制,例如不能呼叫方法,不能執行任意的python表示式。它的設計者表示這樣做是故意的,我不去爭論這樣到底是好是壞,但在除錯時我們確實需要想執行任意的python表示式。django提供了自定義標籤的機制,再加上python的eval函式,使得在django模板中也能執行任意的...