import os, sys import numpy as np import time from datetime import datetime def file_fliter(folder:str, file_ext:str, sort_format = None): files_List = os.listdir(folder) target_files = [] # flitered by file extention name for file in files_List: if file.split('.')[-1] == file_ext: target_files.append(file) if sort_format is not None: # sort the list by the sort_format target_files.sort(key=sort_format) return target_files def get_skip_rows(path): with open(path,"r") as ply_file: count = 0 # read the line for line in ply_file.readlines(): # strip the str of the header flag = line.strip() if flag == "end_header": return count + 1 else: if count >= 50: return None count += 1 return None def read_ply(path:str): start_line = get_skip_rows(path) if start_line is not None: ply_array = np.loadtxt(path,skiprows=start_line) else: ply_array = None return ply_array def write_ply(data:np.array,folder:str,name:str): file = os.path.join(folder,name+".ply") n_p = data.shape[0] n_cols = data.shape[1] if n_cols == 3: header = ["ply\nformat ascii 1.0\n", "comment write_ply generated\n", f"element vertex {n_p}\n", "property float x\n", "property float y\n", "property float z\n", "end_header"] fmt = '%.6f','%.6f','%.6f' elif n_cols == 6: header = ["ply\nformat ascii 1.0\n", "comment write_ply generated\n", f"element vertex {n_p}\n", "property float x\n", "property float y\n", "property float z\n", "property uchar red\n", "property uchar green\n", "property uchar blue\n", "end_header"] fmt = '%.6f','%.6f','%.6f','%d','%d','%d' np.savetxt(file,data, delimiter=" ", header="".join(header), comments="", fmt=fmt) print(f"{time.asctime()} | {name}.ply have been saved with {n_p} points!") def update_folder_for_today(folder_tree:dict[str,str]): """ "sup_folder" + "today" +"sub_folder" >> "today_folder" """ try: sup = folder_tree["sup_folder"] sub = folder_tree["sub_folder"] today = datetime.now().strftime('%Y-%m-%d') today_folder = os.path.join(sup,today,sub) folder_tree["today"] = today folder_tree["today_folder"] = today_folder except Exception as e: raise ValueError(f"{e}") if __name__ == "__main__": ply_array = read_ply('src\\microwave\\demo\\demoData\\2522.ply') print(type(ply_array)) print(ply_array)