रूबी में एक फ़ाइल नाम का विस्तार खोजें


103

मैं एक रेल एप्लिकेशन के फ़ाइल अपलोड भाग पर काम कर रहा हूं। विभिन्न प्रकार की फाइलें ऐप द्वारा अलग-अलग तरीके से हैंडल की जाती हैं।

मैं कुछ फ़ाइल एक्सटेंशनों का श्वेतसूची बनाना चाहता हूं ताकि अपलोड की गई फ़ाइलों की जांच करके देख सकें कि उन्हें कहां जाना चाहिए। सभी फ़ाइल नाम तार हैं।

मुझे फ़ाइल नाम स्ट्रिंग के केवल विस्तार भाग की जांच करने का एक तरीका चाहिए। फ़ाइल नाम सभी "some_file_name.some_extension" के प्रारूप में हैं।

जवाबों:


167

यह वास्तव में बुनियादी सामान है:

irb(main):002:0> accepted_formats = [".txt", ".pdf"]
=> [".txt", ".pdf"]
irb(main):003:0> File.extname("example.pdf") # get the extension
=> ".pdf"
irb(main):004:0> accepted_formats.include? File.extname("example.pdf")
=> true
irb(main):005:0> accepted_formats.include? File.extname("example.txt")
=> true
irb(main):006:0> accepted_formats.include? File.extname("example.png")
=> false

4
कैसे के बारे में "file_with_no_extension".split('.').last?
a'r

12
यह दुर्भाग्यपूर्ण है कि यह बहु-अवधि के प्रत्ययों के लिए काम नहीं करता है tar.gz, जैसे कि tar.bz2
कोमोडोवेव

2
@KomodoDave एक्सटेंशन के एक हेयुरिस्टिक (इस प्रकार त्रुटि प्रवण) डेटाबेस को छोड़कर, मल्टी-पीरियड प्रत्यय के लिए कुछ भी काम नहीं करता है।
सिरो सेंटिल्ली 郝海东 冠状 iro i 法轮功 '24 अक्टूबर'14

4
आप यह File.extname("example.png").downcaseसुनिश्चित करना चाहते हैं कि विस्तार सभी कैप्स में नहीं है
सैम ईटन

@CiroSantilli 六四 ill ill ill choose choose जब तक आप पहली डॉट के बाद कुछ भी शामिल करने का विकल्प नहीं चुनते हैं ... लेकिन तब लोग डॉट्स के साथ फाइल नाम बनाते हैं, इसलिए हाँ, किसी भी तरह से त्रुटि प्रवण है, उस पर सहमत हुए।
ल्यूक

78

extnameफ़ाइल वर्ग से विधि का उपयोग करें

File.extname("test.rb")         #=> ".rb"

इसके अलावा आपको basenameविधि की आवश्यकता हो सकती है

File.basename("/home/gumby/work/ruby.rb", ".rb")   #=> "ruby"

16

पुराना पुराना विषय लेकिन यहाँ विस्तार विभाजक बिंदु और संभावित अनुगामी रिक्त स्थान से छुटकारा पाने का तरीका है:

File.extname(path).strip.downcase[1..-1]

उदाहरण:

File.extname(".test").strip.downcase[1..-1]       # => nil
File.extname(".test.").strip.downcase[1..-1]      # => nil
File.extname(".test.pdf").strip.downcase[1..-1]   # => "pdf"
File.extname(".test.pdf ").strip.downcase[1..-1]  # => "pdf"

0

क्या विस्तार विभाजक की सवारी प्राप्त करने के लिए ऐसा करना आसान नहीं होगा?

File.extname(path).delete('.')
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.