【问题标题】:IO.readlines method in ruby behaving wierdly?Ruby 中的 IO.readlines 方法行为怪异?
【发布时间】:2013-10-22 11:55:42
【问题描述】:

这听起来很愚蠢,但它让我头疼了 3 小时……!! 我创建了一个类方法,我在其中提取文件基名(放置在根文件夹中)。问题是 IO.readlines 方法不接受具有从提取返回的基本名称的文件。它返回错误:

./lib/fileCheck.rb:36:in `readlines': No such file or directory -  (Errno::ENOENT)

但只要我在 readlines 中手动输入文件基本名称,它就会起作用。这是类方法:

class FileCheck
  def self.read_file
    file = File.basename(Dir[File.join(File.expand_path('../.'), "*.txt")].to_s)
    file = IO.readlines(file)
    return file
  end
end

没有结果,但只要我手动放置文件名,它就可以完美运行。

  def self.read_file
  #file = File.basename(Dir[File.join(File.expand_path('../.'), "*.txt")].to_s)
  file = IO.readlines('sample.txt')
  return file
 end

我检查了 irb 和语句

File.basename(Dir[File.join(File.expand_path('../.'), "*.txt")].to_s) 

正在返回类 String 的文件基名。

有什么建议吗??????

【问题讨论】:

  • basename 调用究竟返回了什么? p file_fasta的发布结果
  • 在 irb 中它返回类字符串的文件基名(例如“sample.txt”)。这就是我想要的。在 prog 执行期间,返回的基本名称文件变量也是类字符串。但不知何故它不能与 readlines 一起使用???
  • ohh p file_fasta 什么也没返回??一个空字符串
  • 你期望File.basename(Dir[File.join(File.expand_path('../.'), "*.txt")].to_s) 会返回什么?
  • Sergio,感谢您的回复,但我解决了这个问题。问题在于扩展路径。现在它工作正常。

标签: ruby io


【解决方案1】:

使用expand_pathjoin 都没有关系。您的代码中仍然存在市长问题:

File.basename(Dir[File.join(File.expand_path('../.'), "*.txt")].to_s) 

Dir[] 也称为Dir.glob 返回一个数组!确保选择其中一个元素而不是调用to_s。当有多个文件时,您会遇到问题。

【讨论】:

  • 感谢您指出这一点。它将返回多个文件的问题。我只是想根据文件扩展名从不同的位置拿起一个文件。有什么办法可以避免使用 Dir[]??
  • 说实话,我不明白你为什么要使用它。文件名是未知的,您只知道扩展名吗?如果是这种情况,您将不得不遍历 Dir[] 的结果
  • 在这种情况下,我不希望用户指定文件,而是希望 prog 根据扩展名检测文件,使其更加用户友好。只有一个具有特定扩展名的文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-21
  • 1970-01-01
  • 2014-01-21
  • 1970-01-01
相关资源
最近更新 更多