如何查找解析文本文件特定开头行 修复Python读取ANSYS网格维度代码
问题分析
原代码存在以下明显错误:
- 仅在进入循环前读取了一次文件行,循环内没有更新
row变量,始终在判断第一行内容 - 提前读取第一行的第8位作为维度值,未匹配到目标行就取值,结果必然错误
- 只有匹配到目标行时才累加
current_pos,如果目标行不在第一行就会进入死循环 - 硬编码取行的索引位置,一旦行内空格数量变动就会取错值,鲁棒性极差
- 未手动关闭打开的文件句柄,存在资源泄漏风险
- 额外编写的计算文件行数的函数完全冗余,逐行遍历文件即可实现需求
修正后代码
import os root = os.getcwd() file = "test.txt" file_name = os.path.join(root, file) # 上下文管理器自动管理文件句柄,无需手动关闭 with open(file_name, 'r', encoding='utf-8') as f: for row in f: row = row.strip() # 匹配以(2开头的目标行 if row.startswith("(2"): # 去除行内括号后按空格拆分,取第二个值即为维度 parts = row.replace('(', '').replace(')', '').split() dim = parts[1] print(f"Dimensions = {dim}") # 匹配到后直接终止遍历,提升效率 break
补充说明
如果严格要按行号定位(比如确定维度信息一定在第8行),可以直接用enumerate获取行号匹配,无需判断行开头:
import os root = os.getcwd() file = "test.txt" file_name = os.path.join(root, file) with open(file_name, 'r', encoding='utf-8') as f: for line_num, row in enumerate(f, start=1): if line_num == 8: parts = row.replace('(', '').replace(')', '').split() dim = parts[1] print(f"Dimensions = {dim}") break
内容的提问来源于stack exchange,提问作者Dev
相关产品推荐
相关产品推荐

