ruby - 遍历给定目录中的所有文件

标签 ruby file ruby-on-rails-4 directory iteration

我目前正在使用 cities gem填充数据库中的城市列表以创建地址。我被要求删除这个 gem 并从 cities gem 附带的 cities 文件夹中读取所有 json 文件。

我看过几篇关于如何实现它的 SO 帖子,包括:Iterate through every file in one directory

在使用 Dir.glob 实现后,我的应用程序在该特定页面上完全崩溃并退出/退出服务器。

否则,使用 Dir.foreach,我得到

Errno::ENOENT in StuffsController
No such file or directory @ dir_initialize

对于这个错误,我尝试了this SO post但意识到我真的不能更新我的 Gemfile,因为它给我带来了更多问题。

这是我生成 Errno::ENOENT 的代码:

@okay = Array.new
Dir.foreach("#{Rails.root}/cities/*.json") do |json_file|
  @okay << JSON.parse(File.read(json_file))
end

我还尝试了来自 this SO post 的以下代码但收到了

NameError in StuffsController
undefined local variable or method `id' for # <StuffsController>


@okay = Array.new
Dir.foreach("#{Rails.root}/cities/#{id}.json") do |json_file|
    @okay << JSON.parse(File.read(json_file))
end

我可以让它正常地从该文件夹读取单个文件,100% 没问题:

@cities = Array.new
@json = JSON.parse(File.read('cities/AD.json'))
@json.each do |j|
  if j.second.has_key?("accentcity")
    @cities << j.second.select {|k,v| k == "accentcity"}
    name = j.second.select {|k,v| k == "accentcity"}
    City.first_or_create(name: name)
  end
end

(请注意,@cities 数组主要用于测试我的方法是否产生了我想要的结果)

我正在使用 Ruby on Rails 版本 4.2.6。

最佳答案

Dir.foreach这不是正确的方法。它的参数应该是目录,而不是全局模式。在您的情况下,它会在您的 Rails 项目中查找字面上称为 "cities/*.json" 的目录,该目录显然不存在。

如果cities/中只有.json文件,你可以使用Dir.foreach("#{Rails.root}/cities/")

Dir.glob 应该是正确的方法。您能否向我们展示您在服务器崩溃时收到的错误消息?

如果 "cities" 中的所有 json 文件都有效,这段代码应该可以工作:

@okay = Dir.glob("#{Rails.root}/cities/*.json").map do |json_file|
    JSON.parse(File.read(json_file))
end 

关于ruby - 遍历给定目录中的所有文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42057402/

相关文章:

ruby - 如何在没有原始 SQL 的情况下使用 Sequel 编写 PostgreSQL 查询?

file - 如何在批处理脚本中读取文件的最后两行

c# - 从流阅读器中删除最后 x 行

c++ - 在文本文件中间附加字符串

ruby - 如何在 Rails 4 中使用表单对象之前的验证回调?

json - 输出JSON时防止Rails对URL中的&符号进行编码

ruby - 是否可以更改 ruby 注释符号?

ruby - 如何摆脱 ruby 中的非ascii字符

regex - 使用 scan 方法 + regexp 将字符串分解为单词,如果单词有 `' ` 字符,则删除该字符及其后的所有内容

ruby-on-rails - Rails 生成模型,包括验证?