Відкрийте потік IO з локального файлу чи URL-адреси


104

Я знаю, що на інших мовах є лібри, які можуть приймати рядок, що містить або шлях до локального файлу, або до URL-адреси та відкривати його як читабельний потік вводу-виводу.

Чи є простий спосіб зробити це в рубіні?

Відповіді:


224

open-uri є частиною стандартної бібліотеки Ruby, і вона перегляне поведінку, openщоб ви могли відкрити URL-адресу, а також локальний файл. Він повертає Fileоб'єкт, тому ви повинні мати можливість викликати такі методи, як readі readlines.

require 'open-uri'
file_contents = open('local-file.txt') { |f| f.read }
web_contents  = open('http://www.stackoverflow.com') {|f| f.read }

2
Чи є спосіб повернути файл-об’єкт, як ви тут, з вкладення ActionMailer?
Підручник

9
Знайте, це зараз трохи старе, але ви також можете зробити:content = open("http://example.com").read
Automatico

6
Ви можете, але робити це поза закриттям так, як дескриптор файлу буде відкритим. Це може бути проблемою для деяких звичаїв.
Аарон Хінні

19
зауважте, що файл open-uriне передаватиметься потоково , тому ви не можете прочитати перші 4 к. open-uriпрочитає цілий файл в пам'ять у момент відкриття.
zed_0xff

3
URI.parse('http://www.stackoverflow.com').open { |f| f.read }Якщо ви шукаєте спосіб страхувати, це не вимагає Kernal.open. Також обходить правила безпеки rubocop.
newdark-it
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.