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

运行Python读文件代码出现'str'无'readlines'属性错误是什么原因

问题诊断与修复

1 报错的核心原因

报错'str' object has no attribute 'readlines'是因为:

  • 你调用read_column函数时,传入的第一个参数是字符串格式的文件路径,而非已打开的文件对象。readlines()是文件IO对象的专属方法,字符串类型没有该方法。
  • 你的函数第一个参数命名为file_name本身存在误导性,很容易让调用方误以为要传文件名字符串,而非文件对象。

2 代码存在的其他隐藏问题

  • 分隔符处理逻辑错误:使用split(" ")按单个空格分割,如果列之间是多个空格、制表符分隔,会生成空字符串元素,要么触发索引越界,要么取到错误值,应该用无参split()自动匹配任意连续空白符分割。
  • 未做类型转换:分割后取出的是字符串类型,没有转为浮点型,不符合存储基因频率浮点数值的需求。
  • 未处理空行/首尾空白:如果行首尾有空格、换行符,或者存在空行,会导致分割结果异常。

3 修复后的代码

如果你确定参数要接收已打开的文件对象,修改后代码如下:

def read_column(file_obj, column_number):
    floats = []
    for line in file_obj.readlines():
        # 跳过空行
        stripped_line = line.strip()
        if not stripped_line:
            continue
        # 按任意空白符分割后转浮点
        cols = stripped_line.split()
        floats.append(float(cols[column_number]))
    return floats

如果你希望参数可以直接传文件路径,不需要调用方提前打开文件,修改后代码如下:

def read_column(file_name, column_number):
    floats = []
    # 自动管理文件打开关闭
    with open(file_name, 'r', encoding='utf-8') as f:
        for line in f:
            stripped_line = line.strip()
            if not stripped_line:
                continue
            cols = stripped_line.split()
            floats.append(float(cols[column_number]))
    return floats

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 21:06:04