Отримайте ім'я та розширення файлу в Ruby


123

Я працюю над програмою, щоб завантажити відео з YouTube, перетворити його в MP3 і створити структуру каталогу для файлів.

Мій код:

FileUtils.cd("#{$musicdir}/#{$folder}") do
  YoutubeDlhelperLibs::Downloader.get($url)
  if File.exists?('*.mp4')
    puts 'Remove unneeded tempfile'
    Dir['*.mp4'].each do |waste|
      File.delete(waste)
    end
  else
    puts 'Temporary file already deleted'
  end

  Dir['*.m4a'].each do |rip|
    rip.to_s
    rip.split
    puts 'Inside the function'
    puts rip
  end

end

Перший переходить до вже створеної музичної папки. Всередині я виконую get. Після цього у мене в каталозі є два файли: "xyz.mp4" і "xyz.m4a".

Я хотів би отримати ім'я файлу без розширення, щоб я міг обробляти обидва файли по-різному.

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

Хтось має іншу ідею?


5
Не використовуй, $globalsяк ти. Вони є дуже сильним натяком на те, що ви не розумієте змінного масштабування та покладаєтесь на глобальні "обмани". Вони мають кодовий запах і призводять до нещасть і болю.
Олов'яний чоловік

Також rip.to_sі rip.splitнічого не робити.
Олов'яний чоловік

Відповіді:


304

Ви можете використовувати такі функції для своїх цілей:

path = "/path/to/xyz.mp4"

File.basename(path)         # => "xyz.mp4"
File.extname(path)          # => ".mp4"
File.basename(path, ".mp4") # => "xyz"
File.basename(path, ".*")   # => "xyz"
File.dirname(path)          # => "/path/to"

15
Зауважте, що extnце рядок ".mp4" або навіть рядок".*" .
Фрогз

Дякую. Проблема в цьому випадку полягає в тому, що я не знаю імені файлу в цьому місці. Я просто знаю, що два файли існують. Один .mp4 і один .m4a. Як я можу отримати ці імена файлів?
Саша Маннс

@saigkill використовуйте ". *", підстановку, як сказав Фрогз, якщо ви не знаєте / все одно, що таке розширення.
Тревіс Редер

1
До цього часу я принаймні 60 разів хотів поцілувати людину, яка написала це
bbozo
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.