我在S3上有两个CSV文件。当我打开
其中一个时,返回一个文件对象
。而当我打开
另一个时,则返回一个StringIO对象
。
fn1 #=> "http://SOMEWHERE.s3.amazonaws.com/setup_data/d1/file1.csv"
open(fn1) #=> #<File:/var/folders/sm/k7kyd0ns4k9bhfy7yqpjl2mh0000gn/T/open-uri20140814-26070-11cyjn1>
fn2 #=> "http://SOMEWHERE.s3.amazonaws.com/setup_data/d2/d3/file2.csv"
open(fn2) #=> #<StringIO:0x007f9718670ff0>
为什么?有没有一种方法可以使用一致的数据类型打开它们?
我需要将相同的数据类型
String
传递到 CSV.read(open(file_url))
,但如果有时它获取到的是 File
,有时是 StringIO
,那就行不通了。它们是通过不同的 Ruby 脚本创建的(它们包含非常不同的数据)。
在我的 Mac 上,它们都似乎是普通文本 CSV 文件,并且它们是通过 AWS 控制台上传的,并且具有相同的权限和相同的元数据(content-type: application/octet-stream)。