python 1×21数组求和为1×1
每个时间戳对应1×21数组,将其求和为1×1,结果保留2位小数
#!usr/bin/env python # -*- coding:utf-8 -*- """ @author: Suyue @file: lianxi.py @time: 2025/03/11 @desc: """ import numpy as np import re import os def calculate_concentration_clumnsum_intensity(concentration): """ 雨滴谱数浓度 concentration :return: 求和 concentration_clumnsum (1×1),结果保留 2 位小数 """ # 计算数浓度列求和,并保留 2 位小数 concentration_clumnsum = round(np.sum(concentration), 2) # 对整个数组求和 return concentration_clumnsum def read_concentrations_data(file_path): """ 读取雨滴谱数浓度数据 :param file_path: 输入文件路径 :return: timestamps (时间戳列表), concentration_matrices (浓度矩阵列表,每个矩阵为1×21) """ timestamps = [] concentration_matrices = [] with open(file_path, 'r') as file: lines = file.readlines() i = 0 while i < len(lines): # 读取时间戳 line = lines[i].strip() if re.match(r'\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}', line): timestamps.append(line) i += 1 # 移动到下一行 # 初始化一个空列表来存储1×21数组的元素 array_elements = [] # 读取接下来的1行,每行包含21个数值 if i < len(lines): row = lines[i].strip().split() # 检查当前行是否是时间戳(避免错误) if not re.match(r'\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}', lines[i].strip()): row_elements = list(map(float, row)) # 将行数据转换为浮点数 array_elements.extend(row_elements) i += 1 # 将一维列表转换为1×21的NumPy数组 if len(array_elements) == 21: concentration = np.array(array_elements).reshape(1, 21) # 转换为1×21的数组 concentration_matrices.append(concentration) else: # 如果数据不完整,跳过这个时间戳 timestamps.pop() else: # 如果当前行不是时间戳,则可能是空行或其他无效数据,跳过它 i += 1 return timestamps, concentration_matrices def write_raindrop_concentration_clumnsum_to_file(timestamps, concentration_clumnsum, output_file_path): """ 将时间戳和求和结果写入文件 :param timestamps: 时间戳列表 :param concentration_clumnsum: 求和结果列表(每个元素是一个标量值) :param output_file_path: 输出文件路径 """ with open(output_file_path, 'w') as file: for timestamp, sum_value in zip(timestamps, concentration_clumnsum): file.write(f"{timestamp}\n") file.write(f"{sum_value:.2f}\n") # 保留 2 位小数 file.write("\n") # 每个时间戳的数据块之间加一个空行作为分隔 # 批量处理多个文件夹 def batch_process_concentration_clumnsum_files(input_dir, output_dir): # 确保输出目录存在 os.makedirs(output_dir, exist_ok=True) # 遍历输入目录中的所有TXT文件 for filename in os.listdir(input_dir): if filename.endswith('.txt'): file_path = os.path.join(input_dir, filename) # 读取数据 timestamps, concentration_matrices = read_concentrations_data(file_path) concentration_clumnsum_results = [] # 创建一个新的列表来存储降水强度结果 for concentration in concentration_matrices: concentration_clumnsum_intensity = calculate_concentration_clumnsum_intensity(concentration) concentration_clumnsum_results.append(concentration_clumnsum_intensity) # 将计算结果添加到新列表中 # 构造输出文件路径 output_file_path = os.path.join(output_dir, f"{os.path.splitext(filename)[0]}_one.txt") # 将结果写入文件 write_raindrop_concentration_clumnsum_to_file(timestamps, concentration_clumnsum_results, output_file_path) # 输入和输出目录 input_dir = 'F:/lianxi2/' # 替换为您的输入文件目录路径 output_dir = 'F:/lianxi2/result' # 替换为您的输出文件目录路径 # 批量处理文件 batch_process_concentration_clumnsum_files(input_dir, output_dir)
结果不保留2位小数
#!usr/bin/env python # -*- coding:utf-8 -*- """ @author: Suyue @file: lianxi.py @time: 2025/03/11 @desc: """ import numpy as np import re import os def calculate_concentration_clumnsum_intensity(concentration): """ 雨滴谱数浓度 concentration :return: 求和 concentration_clumnsum (1×1),不保留小数 """ # 计算数浓度列求和 concentration_clumnsum = np.sum(concentration) # 对整个数组求和 return concentration_clumnsum def read_concentrations_data(file_path): """ 读取雨滴谱数浓度数据 :param file_path: 输入文件路径 :return: timestamps (时间戳列表), concentration_matrices (浓度矩阵列表,每个矩阵为1×21) """ timestamps = [] concentration_matrices = [] with open(file_path, 'r') as file: lines = file.readlines() i = 0 while i < len(lines): # 读取时间戳 line = lines[i].strip() if re.match(r'\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}', line): timestamps.append(line) i += 1 # 移动到下一行 # 初始化一个空列表来存储1×21数组的元素 array_elements = [] # 读取接下来的1行,每行包含21个数值 if i < len(lines): row = lines[i].strip().split() # 检查当前行是否是时间戳(避免错误) if not re.match(r'\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}', lines[i].strip()): row_elements = list(map(float, row)) # 将行数据转换为浮点数 array_elements.extend(row_elements) i += 1 # 将一维列表转换为1×21的NumPy数组 if len(array_elements) == 21: concentration = np.array(array_elements).reshape(1, 21) # 转换为1×21的数组 concentration_matrices.append(concentration) else: # 如果数据不完整,跳过这个时间戳 timestamps.pop() else: # 如果当前行不是时间戳,则可能是空行或其他无效数据,跳过它 i += 1 return timestamps, concentration_matrices def write_raindrop_concentration_clumnsum_to_file(timestamps, concentration_clumnsum, output_file_path): """ 将时间戳和求和结果写入文件 :param timestamps: 时间戳列表 :param concentration_clumnsum: 求和结果列表(每个元素是一个标量值) :param output_file_path: 输出文件路径 """ with open(output_file_path, 'w') as file: for timestamp, sum_value in zip(timestamps, concentration_clumnsum): file.write(f"{timestamp}\n") file.write(f"{sum_value}\n") # 直接写入求和结果,不保留小数 file.write("\n") # 每个时间戳的数据块之间加一个空行作为分隔 # 批量处理多个文件夹 def batch_process_concentration_clumnsum_files(input_dir, output_dir): # 确保输出目录存在 os.makedirs(output_dir, exist_ok=True) # 遍历输入目录中的所有TXT文件 for filename in os.listdir(input_dir): if filename.endswith('.txt'): file_path = os.path.join(input_dir, filename) # 读取数据 timestamps, concentration_matrices = read_concentrations_data(file_path) concentration_clumnsum_results = [] # 创建一个新的列表来存储降水强度结果 for concentration in concentration_matrices: concentration_clumnsum_intensity = calculate_concentration_clumnsum_intensity(concentration) concentration_clumnsum_results.append(concentration_clumnsum_intensity) # 将计算结果添加到新列表中 # 构造输出文件路径 output_file_path = os.path.join(output_dir, f"{os.path.splitext(filename)[0]}_one.txt") # 将结果写入文件 write_raindrop_concentration_clumnsum_to_file(timestamps, concentration_clumnsum_results, output_file_path) # 输入和输出目录 input_dir = 'G:/装备科/论文/03-雨滴谱/雨滴谱数据/物理参量/03-降水强度/列求和/' # 替换为您的输入文件目录路径 output_dir = 'G:/装备科/论文/03-雨滴谱/雨滴谱数据/物理参量/03-降水强度/一个值/rain_R_one/' # 替换为您的输出文件目录路径 # 批量处理文件 batch_process_concentration_clumnsum_files(input_dir, output_dir)

浙公网安备 33010602011771号