import os import stat import math def make_writable(file_path): os.chmod(file_path, stat.S_IWRITE) def process_files_in_folder(folder_path): for root, _, files in os.walk(folder_path): for file_name in files: if file_name.endswith(".txt"): file_path = os.path.join(root, file_name) # 确保文件可写 make_writable(file_path) # 读取文件内容并进行处理 with open(file_path, "r") as file: lines = file.readlines() processed_lines = [] for line in lines: numbers = line.split() processed_numbers = [] # 确保第一列为整数 0 或 1,不处理为浮点数 if ( numbers[0] == "0" or numbers[0] == "1" or numbers[0] == "2" or numbers[0] == "3" or numbers[0] == "4" or numbers[0] == "5" or numbers[0] == "6" or numbers[0] == "7" or numbers[0] == "8" or numbers[0] == "9" or numbers[0] == "10" or numbers[0] == "11" or numbers[0] == "12" or numbers[0] == "13" or numbers[0] == "14" or numbers[0] == "15" or numbers[0] == "16" or numbers[0] == "17" or numbers[0] == "18" ): processed_numbers.append(numbers[0]) else: print(f"Unexpected value in first column: {numbers[0]}") continue # 处理后面的列,保留原始格式并确保负数变成正数,且删除 NaN 数据 skip_line = False # 用于标记是否跳过这一行 for number in numbers[1:]: try: number = float(number) if math.isnan(number): # 检查是否为NaN skip_line = True print( f"NaN detected in file: {file_path}, line: {line}" ) break if number < 0: number = abs(number) # 将负数转换为正数 processed_numbers.append(str(number)) # 保留原始格式 except ValueError: processed_numbers.append(number) # 非数字列保持原样 # 如果该行没有NaN数据,则加入结果列表 if not skip_line: processed_line = " ".join(processed_numbers) processed_lines.append(processed_line) # 将处理后的内容写回文件 with open(file_path, "w") as file: file.write("\n".join(processed_lines)) print(f"Finished processing: {file_path}") # 指定文件夹路径 folder_path = r"G:\dataset\PCS\before\labels" #run the function process_files_in_folder(folder_path)