python - 运行此“从文件读取”代码时,为什么会出现“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'
我做错了什么?
解决方案
尽管有参数名称,但该函数需要一个类似文件的对象,而不是您随后需要打开的文件的名称。
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
推荐阅读
- html - 如何在绝对定位的父div和子div之间夹杂一个绝对定位的div
- node.js - Multer:即使输入字段和 multer 字段相同,也会出现意外字段
- django - 在 django 视图中提交时从验证中排除字段
- recursion - 是不是每一个自下而上的DP都有对应的自上而下的实现?
- windows - 无法为 Windows Server 2012 R2 执行 Windows 更新 - 接收代码 #80072efd
- javascript - 创建后如何将值保存到环境变量中?
- azure - 将 Base-64 pfx 转换为可用的 pkcs#12
- flutter - 如何在 Flutter 中使用带有 arrayContains 列表的 where 查询
- css - 如何通过 div 标签要求在 R Shiny 中输入?
- python-3.x - 更新 SQLite 不会改变 python