前面是单个txt
这次批量处理多个txt
将所得结果保存到另一个文件夹
Python 首先处理一个txt内容中多个时间戳,每个时间戳\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$对应32行×32列数组,删除数组前2列和后9列。其次采用第一步方法,批量处理某文件夹内所有txt文件,将结果批量存到另一个文件夹内。
为了处理包含特定时间戳格式的TXT文件,并删除每个时间戳对应的32行×32列数组中的前2列和后9列,然后批量处理文件夹中的所有TXT文件并将结果保存到另一个文件夹,我们可以使用以下Python代码。
首先,确保你的TXT文件格式如下:
- 每文件包含一个或多个时间戳,每个时间戳格式为
YYYY-MM-DD HH:MM:SS
。 - 每个时间戳后面跟着一个空行。
- 紧接着是32行数据,每行包含32个由空格分隔的数字
-
#!/usr/bin/python3 # -*- coding: utf-8 -*- """ @Time : 2025/1/16 16:43 @Author : JK @Email : 1493117872@qq.com @File : list.py @Project : untitled4 """ import os import re def process_array_data(data_lines): """ 处理数组数据,删除前2列和后9列。 """ processed_data = [] for line in data_lines: # 分割每行的数字,转换为浮点数列表,并删除前2个和后9个元素 numbers = list(map(int, line.strip().split())) processed_row = numbers[2:-9] processed_data.append(processed_row) return processed_data def process_single_file(file_path): """ 处理单个TXT文件,返回处理后的内容(时间戳和对应的处理后的数组)。 """ with open(file_path, 'r', encoding='utf-8') as file: lines = file.readlines() results = [] i = 0 while i < len(lines): # 匹配时间戳 timestamp_match = re.match(r'\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$', lines[i].strip()) if timestamp_match: timestamp = lines[i].strip() i += 1 # 跳过空行 # 读取接下来的32行数据 array_lines = lines[i:i + 32] processed_array = process_array_data(array_lines) # 将处理后的数组和时间戳添加到结果列表中 results.append((timestamp, processed_array)) # 移动到下一个时间戳(如果有的话) i += 32 else: i += 1 # 如果不匹配时间戳,则继续检查下一行 return results def process_txt_files_in_directory(input_dir, output_dir): """ 批量处理指定目录中的所有.txt文件,并将结果保存到输出文件夹中的新TXT文件中。 """ if not os.path.exists(output_dir): os.makedirs(output_dir) for filename in os.listdir(input_dir): if filename.endswith(".txt"): input_file_path = os.path.join(input_dir, filename) results = process_single_file(input_file_path) # 获取处理后的结果 # 构造输出文件的名称和路径 output_filename = os.path.splitext(filename)[0] + '_processed.txt' output_file_path = os.path.join(output_dir, output_filename) # 将处理后的内容写入新的TXT文件 with open(output_file_path, 'w', encoding='utf-8') as output_file: for timestamp, array in results: # 写入时间戳 output_file.write(f"{timestamp}\n") # 写入一个空行(如果需要) output_file.write("\n") # 写入处理后的数组数据 for row in array: output_file.write(" ".join(map(str, row)) + "\n") # 如果数组之间需要空行分隔,可以在这里再次写入一个空行(可选) # output_file.write("\n") # 可选,根据格式需求决定是否添加 # 示例使用 input_directory = 'D:/rain' output_directory = 'D:/rain/result' process_txt_files_in_directory(input_directory, output_directory)
注意事项:
-
正则表达式
r'\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$'
用于匹配时间戳。它假设时间戳是文件的唯一一行,并且正好符合该格式。如果时间戳可能出现在其他上下文中,或者格式有所不同,请调整正则表达式。 -
在
process_single_file
函数中,我们假设每个时间戳后面紧跟着一个空行和32行数据。如果实际文件格式有所不同(例如,空行数不同,或数据行数不同),请相应地调整代码。 -
在将处理后的数组写入输出文件时,我们在数组之间添加了一个空行以提高可读性。如果不需要这个空行,请删除相应的
output_file.write("\n")
语句。同样地,如果在每个数组内部的数据行之间需要空行分隔(这通常不是标准的矩阵/数组格式),请取消注释或添加相应的语句。 -
请确保将
input_directory
和output_directory
变量的值替换为你实际的文件夹路径。
-