Как я могу получить имя файла из пути к файлу в Ruby?
Например, если у меня есть путь к "C:\projects\blah.dll"
, и я просто хочу "бла".
Есть ли метод LastIndexOf
в Ruby?
Как я могу получить имя файла из пути к файлу в Ruby?
Например, если у меня есть путь к "C:\projects\blah.dll"
, и я просто хочу "бла".
Есть ли метод LastIndexOf
в Ruby?
require 'pathname'
Pathname.new('/opt/local/bin/ruby').basename
# => #<Pathname:ruby>
Я не был пользователем Windows за долгое время, но Pathname rdoc говорит, что у него нет проблем с разделителями-именами каталогов в Windows.
Попробуйте File.basename
Возвращает последний компонент имени файла, указанный в имени файла, который должен быть сформирован с использованием косой черты (``/) независимо от разделителя, используемого в локальной файловой системе. Если суффикс указан и присутствует в конце файла_файла, он удаляется.
File.basename("/home/gumby/work/ruby.rb") #=> "ruby.rb" File.basename("/home/gumby/work/ruby.rb", ".rb") #=> "ruby"
В вашем случае:
File.basename("C:\\projects\\blah.dll", ".dll") #=> "blah"
Если расширение неизвестно (ему нужен разделитель /):
irb(main):024:0> f = 'C:\foobar\blah.txt'.gsub("\\","/")
=> "C:/foobar/blah.txt"
irb(main):027:0> File.basename(f,File.extname(f))
=> "blah"
Джонатан Лоновски ответил отлично, но есть что-то, о чем ни один из ответов не упоминается здесь. Вместо File::extname
вы можете напрямую использовать '.*'
для получения имени файла.
File.basename("C:\\projects\\blah.dll", ".*") # => "C:\\projects\\blah"
Но если вы хотите получить имя базового файла для каких-либо конкретных файлов расширений, вам нужно использовать File::extname
, иначе нет.
Попробуйте этот код
Используйте extname
File.basename("a/b/d/test.rb", File.extname("a/b/d/test.rb")) #=> "test"
Ответ Jonathon лучше, но чтобы вы знали, somelist[-1]
является одной из доступных обозначений LastIndexOf
.
Поскольку krusty.ar, упомянутый somelist.last
, очевидно, тоже.
irb(main):003:0* f = 'C:\\path\\file.txt'
irb(main):007:0> f.split('\\')
=> ["C:", "path", "file.txt"]
irb(main):008:0> f.split('\\')[-1]
=> "file.txt"
Обратите внимание, что строки с двойными кавычками escape\s.
'C:\projects\blah.dll'.split('\\').last
Если у вас есть доступ к переменным ENV, scan
в сочетании с этим маленьким регулярным выражением (которое находит последнее, но одно слово, точками, затем последним словом строки), имя файла будет помещено в 'filename':
filename = ENV['SCRIPT_NAME'].scan(/\w+\.\w+$/)
Очевидно, вы можете использовать scan
и регулярное выражение для любого имени пути, которое включает имя файла, а __FILE__
- очевидный выбор:
__FILE__.scan(/\w+\.\w+$/)
Вы можете получить путь каталога к текущему script с помощью:
File.dirname __FILE__