Python逐行读取文件后如何通过split()将行转为整数列表
代码调整方案
原代码的核心问题
- 文件读取逻辑错误:
readlines()会一次性读完所有文件内容,将其放在while True循环中时,第一次调用就已读取完全部内容,后续循环永远无法拿到有效行内容,空值判断的逻辑完全失效。 - 字符串切分不兼容:使用
split(' ')按单个空格切分时,源文件中连续出现多个空格的位置会切割出空字符串,后续转换为整数时会直接触发报错。 - 类型缺失转换:切分得到的所有元素都是字符串类型,没有执行整数转换,无法生成目标整数列表。
- 冗余逻辑破坏结构:切分完成后嵌套再次拆分的操作完全多余,会把单个数字元素拆成单字符的子列表,破坏读取结果的结构;定义了变量
n = 0但全程没有使用,属于无意义代码。
调整后的可运行代码
def adjMatrixFromFile(file_path): int_line_list = [] # 用上下文管理器打开文件,自动处理文件资源关闭 with open(file_path, 'r') as f: # 逐行迭代文件对象,无需手动维护读取位置 for line in f: # 去掉行首尾的换行符、空白字符,过滤掉无内容的空行 clean_line = line.strip() if not clean_line: continue # 不指定分隔符的split()会自动按任意连续空白拆分,自动兼容多空格、制表符场景 str_number_list = clean_line.split() # 逐元素转换为整数,存入当前行的整数列表 current_int_line = [int(num) for num in str_number_list] int_line_list.append(current_int_line) return int_line_list # 调用方式保持不变 print(adjMatrixFromFile("file"))
运行输出结果
针对你提供的源文件内容,代码执行后会得到符合要求的嵌套整数列表:
[[5], [0, 1], [1, 2, 1, 2, 1, 3, 1, 3, 1, 4], [2, 3], [3, 0], [4, 0, 4, 2]]
如果后续需要基于这个结果生成邻接矩阵,可以直接取第一行的数值作为矩阵维度,后续每两个相邻整数为一条边的两个端点,在矩阵对应位置赋值即可。
内容的提问来源于stack exchange,提问作者sucksatpython123
相关产品推荐
相关产品推荐

