Python读取文件仅识别最后一行 括号分类存储代码问题排查
代码仅读取最后一行问题分析与修复
问题原因
- 读取文件逐行获取的
line变量默认会携带每行末尾的换行符\n,你提供的测试文件中部分右括号行末尾还有多余空格,直接使用line == 括号的全等判断无法匹配成功,绝大多数行都没有触发存入列表的逻辑,只有无换行符的最后一行可能匹配成功,因此会产生仅读取了最后一行的错觉。 - 原有分类逻辑存在错误:左小括号
(被错误存入listopen3,右大括号}被错误存入listclose1,listopen1全程没有使用场景,分类对应关系混乱。
修复方案
- 逐行读取后先调用
strip()方法清除字符串首尾的换行符、空格等空白字符,再做匹配判断。 - 修正括号分类的对应逻辑,可修改列表名提升可读性,避免匹配错存储位置。
- 建议使用
with语法管理文件句柄,无需手动调用close()方法,可避免文件忘记关闭的资源泄露问题。
修复后代码示例
open_file = input('Please enter the data file: ') # 使用with语句自动管理文件关闭 with open(open_file, 'r') as f: list_brace_left = [] # 存储左大括号{ list_bracket_left = [] # 存储左中括号[ list_paren_left = [] # 存储左小括号( list_brace_right = [] # 存储右大括号} list_bracket_right = [] # 存储右中括号] list_paren_right = [] # 存储右小括号) for line in f: # 清除首尾空白、换行符 cleaned_line = line.strip() if cleaned_line == '{': list_brace_left.append(cleaned_line) elif cleaned_line == '[': list_bracket_left.append(cleaned_line) elif cleaned_line == '(': list_paren_left.append(cleaned_line) elif cleaned_line == '}': list_brace_right.append(cleaned_line) elif cleaned_line == ']': list_bracket_right.append(cleaned_line) elif cleaned_line == ')': list_paren_right.append(cleaned_line) # 输出结果 for items in list_brace_left: print(items) print('----------') for items in list_bracket_left: print(items) print('----------') for items in list_paren_left: print(items) print('----------') for items in list_brace_right: print(items) print('----------') for items in list_bracket_right: print(items) print('----------') for items in list_paren_right: print(items) print('----------')
内容的提问来源于stack exchange,提问作者acecooper99
相关产品推荐
相关产品推荐

