Python读取矩阵文本文件触发ValueError: invalid literal报错求解
错误产生原因
- 核心报错原因:你尝试直接将带逗号分隔符、换行符的字符串
'2,1,1,3\n'传入int()做整数转换,该字符串不符合纯十进制整数的格式,因此触发ValueError。 - 代码还存在其他问题:
- 语法错误:
n = (intmaze[0])是错误写法,你大概率漏写了括号,原本想写int(maze[0]) - 逻辑错误:你想把矩阵的第一行内容当做矩阵边长
n使用,但实际你的文本文件第一行就是矩阵数据,没有单独存储边长信息;且后续取矩阵行的逻辑maze[1:(n*n)+1]也不对,4行4列的矩阵只需要取4行,不是取n*n行 - 类构造函数写法错误:Python的类构造方法是双下划线包裹的
__init__,你写的单下划线_init_不会作为构造函数生效,且构造函数参数里self. row的点是语法错误,应该为逗号 - 文件关闭方法调用错误:
file.close少了括号,实际不会执行关闭操作,容易造成资源泄漏
- 语法错误:
修复后的代码
假设你的需求是读取整个文本中的4行4列矩阵,每行元素按逗号拆分存储,参考代码如下:
# 先修正类构造函数 class MazeNode: # 替换为你自己的类名即可 def __init__(self, row, col, data): self.child = {} self.row = row self.col = col self.data = data self.active = True # 用with上下文管理器读取文件,自动处理资源关闭 matrix = [] with open('filename.txt', 'r', encoding='utf-8') as f: for line in f: # 先去除首尾换行、空白符,再按逗号拆分元素 line_items = line.strip().split(',') matrix.append(line_items) # 此时matrix就是读取到的二维列表,可按需操作 n = len(matrix) # 获取矩阵行数 full = matrix # 所有矩阵行内容
如果你的文本文件原本设计是第一行单独存矩阵边长,下面存n行矩阵内容,需要先修改文本文件第一行加4,再使用如下读取逻辑:
with open('filename.txt', 'r', encoding='utf-8') as f: lines = [line.strip() for line in f] n = int(lines[0]) matrix = [line.split(',') for line in lines[1:1+n]]
内容的提问来源于stack exchange,提问作者Arjun Sarihyan
相关产品推荐
相关产品推荐

