You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从ASCII文件读取矩阵 解决换行符引发的int转换报错

错误原因

invalid literal for int() with base 10: '\n'报错的根源是读取的ASCII文件中存在仅含换行符的空行:空行做split(',')处理后会得到包含'\n'的列表,直接尝试将换行符转为整数就会触发报错。除此之外,行尾多余的逗号、数值前后的多余空格,也可能导致split后出现空字符串,转int时触发同类错误。

修复方案

方案1:逐行处理写法

逻辑清晰,方便后续增加校验逻辑(比如核对每行数值个数、总矩阵行数)

matrix = []
with open('24_5.asc', 'r') as f:
    for line in f:
        # 去除行首尾的换行、空格,跳过空行
        line_content = line.strip()
        if not line_content:
            continue
        # 拆分后过滤空值,逐个转整数存入当前行
        current_row = []
        for num_str in line_content.split(','):
            num_stripped = num_str.strip()
            if num_stripped:
                current_row.append(int(num_stripped))
        matrix.append(current_row)

# 校验行数是否符合预期的512行
print(f"读取到矩阵行数:{len(matrix)}")
print(matrix)

如果你的asc文件实际是用空格、制表符分隔数值而非逗号,直接把split(',')替换为无参数的split()即可,该写法会自动按任意空白字符拆分,自动忽略多余空白,适配性更强。

方案2:精简列表推导式写法

和原有代码的写法风格一致,直接替换原有逻辑即可:

with open('24_5.asc', 'r') as f:
    l = [
        [int(num.strip()) for num in line.strip().split(',') if num.strip()]
        for line in f if line.strip()
    ]
print(l)
核心修复逻辑
  • 提前对每行做strip()处理,去除首尾换行、空白字符,直接跳过内容为空的无效行
  • 拆分字符串后增加非空判断,过滤掉空字符串、纯空白的无效拆分结果,避免传入int()触发类型转换错误
  • 读取完成后建议先核对矩阵行数,确认是否为预期的512行,排查文件首尾多余空行、行内数值缺失的问题

内容的提问来源于stack exchange,提问作者QuantumOscillator

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 00:24:41