Как читать построчно текстовый файл в ruby ​​(хостинг на s3)? - PullRequest
30 голосов
/ 27 апреля 2011

Я знаю, что делал это раньше и нашел простой набор кода, но я не могу вспомнить или найти его: (.

У меня есть текстовый файл записей, которые я хочу импортировать в приложение Rails 3.

Каждая строка представляет запись. Потенциально он может быть разделен символами табуляции для атрибутов, но также подходит только одно значение.

Как мне это сделать?

Ответы [ 5 ]

43 голосов
/ 27 апреля 2011
File.open("my/file/path", "r").each_line do |line|
  # name: "Angela"    job: "Writer"    ...
  data = line.split(/\t/)
  name, job = data.map{|d| d.split(": ")[1] }.flatten
end

Похожие темы

Каковы все распространенные способы чтения файлов в Ruby?

21 голосов
/ 27 апреля 2011

Вы хотите IO.foreach:

IO.foreach('foo.txt') do |line|
  # process the line of text here
end

В качестве альтернативы, если она действительно разделена табуляцией, вы можете использовать библиотеку CSV :

File.open('foo.txt') do |f|
  CSV.foreach(f, col_sep:"\t") do |csv_row|
    # All parsed for you
  end
end
4 голосов
/ 27 апреля 2011
  IO.foreach("input.txt") do |line| 
    out.puts line
    # You might be able to use split or something to get attributes
    atts = line.split
  end
1 голос
/ 31 декабря 2014

Вы можете использовать OpenURI для чтения удаленных или локальных файлов.

Предполагая, что ваша модель имеет вложение с именем file:

# If object is stored in amazon S3, access it through url
file_path = record.file.respond_to?(:s3_object) ? record.file.url : record.file.path
open(file_path) do |file|
  file.each_line do |line|
    # In your case, you can split items using tabs
    line.split("\t").each do |item|
      # Process item
    end
  end
end
1 голос
/ 01 октября 2014

Вы пытались использовать OpenURI (http://ruby -doc.org / stdlib-2.1.2 / libdoc / open-uri / rdoc / OpenURI.html )? Вы должны сделать свои файлы доступными с S3.

Или попробуйте использовать драгоценный камень de aws-sdk (http://aws.amazon.com/sdk-for-ruby).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...