Abra una secuencia IO desde un archivo o URL local


104

Sé que hay bibliotecas en otros idiomas que pueden tomar una cadena que contenga una ruta a un archivo local o una URL y abrirla como una secuencia de E / S legible.

¿Existe una manera fácil de hacer esto en ruby?

Respuestas:


224

open-uri es parte de la biblioteca estándar de Ruby, y redefinirá el comportamiento de openpara que pueda abrir una URL, así como un archivo local. Devuelve un Fileobjeto, por lo que debería poder llamar a métodos como ready readlines.

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

2
¿Hay alguna forma de devolver un objeto de archivo como lo hizo aquí desde un archivo adjunto de ActionMailer?
AnApprentice

9
Sepa que esto es un poco viejo ahora, pero también puede hacer:content = open("http://example.com").read
Automático

6
Puede, pero hacerlo fuera del cierre así mantendrá abierto el descriptor del archivo. Esto puede ser un problema para algunos usos.
Aaron Hinni

19
tenga en cuenta que open-urino transmitirá un archivo, por lo que no puede leer un primer 4k de él. open-urileerá un archivo completo en la memoria en el momento de la apertura.
zed_0xff

3
URI.parse('http://www.stackoverflow.com').open { |f| f.read }Si busca una forma de asegurarse, no llame Kernal.open. También evita las reglas de seguridad de Rubocop.
newdark-it
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.