|
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)
|
|