86 lines
3.4 KiB
Python
86 lines
3.4 KiB
Python
|
|
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)
|