【发布时间】: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