【问题标题】:open file in different directory to read lines - ruby在不同的目录中打开文件以读取行 - ruby
【发布时间】:2017-07-07 16:21:50
【问题描述】:

我一直在使用 ARGV 打开文件,但我觉得它很笨重,我想将它们放在不同的文件夹中。

我想在 talk_parser.rb 中打开 input.txt,我也不想硬编码文件名。

我的目录(密码是 bin)

├── bin
│ └── talk_parser.rb
└── data
  └── input.txt

试过了

x = Dir.glob('../data/*.txt').to_s
file = File.open(File.expand_path(x))

但我得到了这个错误

talk_parser.rb:34:in `initialize': 
No such file or directory @ rb_sysopen - /home/huvi/Desktop/test/bin/["../data/input.txt"] (Errno::ENOENT)
from talk_parser.rb:34:in `open'
from talk_parser.rb:34:in `<main>'

不知道怎么办

【问题讨论】:

  • Dir#glob 返回一个Array。在这种情况下,您的Array 将是“/home/huvi/Desktop/test/data/”中的每个“*.txt”文件,因此对于初学者来说,您可能应该遍历这些文件。如果您只想要第一个,请将您的第一行 to_s 更改为 first。现在你在Array上调用to_s,因此你的输出'["../data/input.txt"]'
  • 你能在Dir::glob中使用..吗?还是应该是x = Dir.glob('**/data/*.txt').first(假设data 目录中有一个文件)?
  • @orde 好点。从技术上讲,您可以在Dir::glob 中使用..,尽管它的结果非常奇怪,我很难理解
  • @engineersmnky:是的。确实很奇怪的结果。哦,好吧...假期在召唤;)
  • 你能解释一下区别吗,我一直在尝试使用 RSpec 进行测试,当我有Dir.glob('../data/*.txt').first 时,它在我执行 ruby​​ run.rb 但在 RSpec 中不起作用。然后在 RSpec 中,当我有 Dir.glob('**/data/*.txt').first 时它可以工作,但是当我从 bin 文件夹运行程序时它不起作用? @engineersmnky @orde

标签: ruby file directory


【解决方案1】:

Dir.glob 返回一个Array。 您可以获取第一个元素并打开它:

  path = Dir.glob('../data/*.txt').first
  file = File.open(path)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多