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模板中也能執行任意的...