from email import header import os, sys import numpy as np import time from tqdm import tqdm 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!") if __name__ == "__main__": ply_array = read_ply('src\\microwave\\demo\\demoData\\2522.ply') print(type(ply_array)) print(ply_array)