簡體   English   中英

如何使用 Ruby 獲取一個文件夾中的所有文件名?

[英]How do I get all the files names in one folder using Ruby?

這些在一個文件夾中:

This_is_a_very_good_movie-y08iPnx_ktA.mp4
myMovie2-lKESbDzUwUg.mp4
his_is_another_movie-lKESbDzUwUg.mp4

如何通過給出最后一部分y08iPnx_ktA從文件中獲取字符串mymovie1的第一部分? 就像是:

get_first_part("y08iPnx_kTA") #=> "This_is_a_very_good_movie"

把問題分成幾部分。 get_first_part方法應該 go 類似於:

  1. 使用Dir獲取文件列表。

  2. 遍歷每個文件,並且;

    1. 提取“名稱”('This_is_a_very_good_movie')和“標簽”('y08iPnx_ktA')。 每個文件都應該使用相同的正則表達式。

    2. 如果“標簽”與正在查找的內容匹配,則返回“名稱”。

快樂編碼。


在 REPL 中玩耍並玩得開心:-)

它可以做得比這更干凈嗎? 根據@Tin Man 的建議修改

def get_first_part(path, suffix)
  Dir.glob(path + "*" + suffix + "*").map { |x| File.basename(x).gsub(Regexp.new("#{suffix}\.*$"),'') } 
end

puts get_first_part("/path/to/files/", "-y08iPnx_kTA")
def get_first_part(path, suffix)
  Dir.entries(path).find do |fname|
    File.basename(fname, File.extname(fname)).end_with?(suffix)
  end.split(suffix).first
end

有點擴展了@Steve Wilhelm 的答案——除了不使用 glob(當我們只使用文件名時不需要它),避免使用 Regexp 並使用File.exname(fname)來調用File.basename所以你不必包含文件擴展名。 還返回字符串“This_is_a_very_good_movie”而不是文件數組。

如果找不到文件,這當然會引發..在這種情況下,如果您只想在找不到匹配項的情況下返回nil

def get_first_part(path, suffix)
  file = Dir.entries(path).find do |fname|
    File.basename(fname, File.extname(fname)).end_with?(suffix)
  end
  file.split(suffix).first if file
end

如果文件名只有一個連字符:

path = '/Users/greg/Desktop/test'
target = 'rb'

def get_files(path, target)
  Dir.chdir(path) do
    return Dir["*#{ target }*"].map{ |f| f.split('-').first }
  end
end

puts get_files(path, 'y08iPnx_ktA')
# >> This_is_a_very_good_movie

如果有多個連字符:

def get_files(path, target)
  Dir.chdir(path) do
    return Dir["*#{ target }*"].map{ |f| f.split(target).first.chop }
  end
end

puts get_files(path, 'y08iPnx_ktA')
# >> This_is_a_very_good_movie

如果假定代碼從包含文件的目錄內部運行,則可以刪除Dir.chdir ,將事情簡化為:

puts Dir["*#{ target }*"].map{ |f| f.split('-').first }
# >> This_is_a_very_good_movie

或者

puts Dir["*#{ target }*"].map{ |f| f.split(target).first.chop }
# >> This_is_a_very_good_movie

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM