2017-07-07 94 views
1

我一直在使用ARGV来打开文件,但我觉得它笨重,我想让他们在不同的文件夹中。在不同的目录中打开文件来读取行 - ruby​​

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

我的目录(pwd是宾)

├── 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>' 

不知道该怎么办

+1

'Dir#glob'返回'Array'。在这种情况下,你的'Array'将是“/ home/huvi/Desktop/test/data /”中的每个“* .txt”文件,因此对于初学者来说,你应该循环这些文件。如果你只想要第一个,那么把你的第一行'to_s'改成'first'。现在你在'Array'上调用'to_s',因此你的输出''[“../ data/input.txt”]'' – engineersmnky

+0

你可以在'Dir :: glob'中使用'..'吗?或者它应该是'x = Dir.glob('**/data/*。txt')。第一个'(假设'data'目录中有一个文件)? – orde

+0

@或好点。技术上你可以在'Dir :: glob'中使用'..',虽然它有很奇怪的结果,我很难理解 – engineersmnky

回答

0

Dir.glob返回Array。 你可以得到第一个元素并打开它:

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