使用正则表达式提取特定字符串后的多值及批量文件处理问题
嘿,我来帮你搞定这个数据提取的问题!你遇到的无匹配结果、高效处理大文件的需求,我都给你梳理清楚啦👇
高效提取Time和Temperature并导出CSV的解决方案
第一步:先排查之前无匹配结果的常见坑
你的代码没匹配到内容,大概率是这几个原因:
- 正则表达式没对准实际格式:比如文件里是
Time: 15.2,但你写的正则是Time=\d+,符号、空格没对应上 - 大小写不一致:文件里是小写的
time,但正则只匹配大写Time,没加忽略大小写的规则 - 编码问题:文件不是UTF-8编码,读取时乱码导致匹配失败
- 读取逻辑问题:比如你直接读了文件前几行,但目标内容在后面,或者没逐行扫描
第二步:高效提取的核心思路
要处理上百个大文件,逐行读取+匹配到目标后立即停止扫描是最优方案——不用把整个文件加载到内存,能省超多资源。具体流程是:
- 批量遍历目录下所有
.txt和.sed文件 - 对每个文件逐行读取,用正则匹配Time和Temperature的值
- 一旦两个值都找到(按需调整停止条件),立刻停止读取当前文件
- 把所有文件的结果整理成DataFrame,导出为CSV
第三步:可直接复用的代码实现
import os import re import pandas as pd # 重点!根据你文件里的实际格式调整正则表达式 # 示例:匹配类似 "Time: 15.2" 或 "Temperature: 23.5" 的格式 time_pattern = re.compile(r'Time:\s*(\d+\.?\d*)', re.IGNORECASE) temp_pattern = re.compile(r'Temperature:\s*(\d+\.?\d*)', re.IGNORECASE) # 存储所有文件的提取结果 data_list = [] # 替换成你的文件所在目录 target_dir = "./your_files_folder" for filename in os.listdir(target_dir): if filename.endswith(('.txt', '.sed')): file_path = os.path.join(target_dir, filename) time_val = None temp_val = None # 逐行读取,找到目标就停 with open(file_path, 'r', encoding='utf-8', errors='ignore') as f: for line in f: # 匹配Time(没找到才继续找) if not time_val: time_match = time_pattern.search(line) if time_match: time_val = float(time_match.group(1)) # 匹配Temperature(没找到才继续找) if not temp_val: temp_match = temp_pattern.search(line) if temp_match: temp_val = float(temp_match.group(1)) # 两个值都找到,直接跳出循环,停止扫描当前文件 if time_val is not None and temp_val is not None: break # 把结果加入列表,缺失值用None标记 data_list.append({ 'Filename': filename, 'Time': time_val, 'Temperature': temp_val }) # 转成DataFrame并导出CSV df = pd.DataFrame(data_list) df.to_csv('time_temperature_results.csv', index=False)
关键调整提示
- 正则要精准匹配:如果你的Time是
[Time] 123格式,正则要改成\[Time\]\s*(\d+\.?\d*);如果是整数,把\d+\.?\d*换成\d+就行 - 编码适配:如果文件是GBK编码,把
encoding='utf-8'改成encoding='gbk',errors='ignore'可以避免读取乱码报错 - 停止条件自定义:如果只需要找到其中一个值就停,修改
break的判断逻辑即可 - 测试小技巧:拿一个测试文件,打印每行的原始内容(用
repr(line)),能看到换行、空格等不可见字符,方便写正则:with open('test_file.txt', 'r') as f: for line in f: print(repr(line))
内容的提问来源于stack exchange,提问作者Brain_overflowed
相关产品推荐
相关产品推荐

