有没有办法让 Roo 接受 StringIO 对象代替文件?

Posted

技术标签:

【中文标题】有没有办法让 Roo 接受 StringIO 对象代替文件?【英文标题】:Is there any way to get Roo to accept StringIO objects in place of files? 【发布时间】:2013-10-30 23:50:39 【问题描述】:

我正在尝试编写一些单元测试,其中涉及Roo 读取 Excel 2007 文件。我的单元测试文件中有 Excel 文件作为十六进制字符串,然后将其输入 StringIO 实例。我不能简单地将 StringIO 对象传递给 Roo::Spreadsheet.open,因为该函数实际上会检查传递的对象是否是 File 实例:

def open(file, options = )
  file = File === file ? file.path : file

  # ...

如果不是,则继续假设它是一个字符串。手动指定扩展名没有帮助:

doc = Roo::Spreadsheet.open(file, extension: :xlsx)

有没有什么巧妙的方法让 Roo 将 StringIO 实例用作文件?

【问题讨论】:

【参考方案1】:

看起来 roo 的 this version 对此有支持。它不是显式检查它是否是一个 File 类,而是根据它是否响应#seek 来检查它是否是一个流。相关代码为here和here。

【讨论】:

以上是关于有没有办法让 Roo 接受 StringIO 对象代替文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何清除 stringio 对象?

Centos 6.6,python 2.7.2 对象没有属性'StringIO

有没有办法在 Spring Roo 中的类旁边创建数据库表?

将 io.BytesIO 转换为 io.StringIO 以解析 HTML 页面

stringIO和bytesIO

chapter6.2stringIO bytesIO和路径操作