运行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
相关产品推荐
相关产品推荐

