首页 > 解决方案 > 运行此“从文件读取”代码时,为什么会出现“str”对象没有属性“readlines”错误?

问题描述

所以,我有一个文件,我需要从文件的列中读取。该列包含作为浮点数的基因频率。要读入的列数是column_number可变的。然后,该列中的所有浮点数(列中只有浮点数)应附加到列表中。到目前为止,我已经做到了这一点:

def read_column(file_name, column_number):
lines = file_name.readlines()
floats = []
for x in lines:
    floats.append(x.split(" ")[column_number])
return floats

该文件作为参数传入,不需要打开,因为测试程序会创建并打开一个包含遗传频率的临时文件。

当我运行此代码时,我收到以下错误:

'str' object has no attribute 'readlines'

我做错了什么?

标签: pythonfilebioinformaticsreadlines

解决方案


尽管有参数名称,但该函数需要一个类似文件的对象,而不是您随后需要打开的文件的名称。

with open(my_file_name) as f:
    x = read_column(f, 3)

这比重新定义函数以获取您打开的文件名更可取,因为您的文件将与任何类似文件的对象(例如,io.StringIO)一起使用,从而更容易测试。

事实上,你可以做一个简单的改变,使函数更节省内存(通过不一次将整个文件读入内存)并且 能够使用任何可迭代的(如 a list),而不仅仅是类似文件的对象.

def read_column(itr, column_number):
    floats = []
    for x in itr:
        floats.append(x.split(" ")[column_number])
    return floats

推荐阅读