Rubyでファイル名を連番に。あるいは日付の連番にする。

スポンサーリンク

Rubyで日付関係をざっと見ておく

Qitta一色でおもしろくないけど結局一番役に立ってるサイト。基本なんか検索してでてきた情報をトレースしとけばいい。

require "time"
require "date"

# ruby => TimeClass
now1 = Time.new
p now1
now2 = Time.new
p now2

# specfic
t1 = Time.local(2018,5,5)
p t1
# can not arg omission
t2 = Time.local(12,44,23,22,5,2017,0,0,false, "JST")
p t2

t = Time.new
p [
  t.year,
  t.month,
  t.day,
  t.hour,
  t.min,
  t.sec,
  t.wday,
  t.zone
]

# string convert Time_Object
t = Time.parse("2018/04/25 19:23:55")
p t
t = Time.parse("2017/04/25 19")
p t
t = Time.parse("2017/6/1 7:5")
p t
t = Time.parse("2017-8-1 1:2:3")
p t
t = Time.parse("20170907 122456")
p t
t = Time.parse("20180907123456")
p t
t = Time.parse("2017-09-12 12:34:56")
p t

# string convert Time_Object => strptime(str, form)
input_str = "2017年5月5日 10:25"
t = Time.strptime(input_str, "%Y年%m月%d日 %H:%M")

# Time_Object convert string => strftime("%Y-%m-%d %H:%M:%S")
t = Time.new
str = t.strftime("%Y-%m-%d %H:%M:%S")
puts str

# Time_Object Calclation
t = Time.new
new_t = t + (60 * 60 * 24)
p new_t


# ruby DateClass
d = Date.today
p d
d = Date.new(2017, 4, 30)
p d

d = Date.today
p [
  d.year,
  d.month,
  d.day,
  d.wday
]

# string convert Date_Object
d = Date.parse("2017/4/25")
p d
d = Date.parse("2017/5/5")
p d
d = Date.parse("2018-8-1")
p d
d = Date.parse("20170907")
p d
d = Date.parse("2017-9/12")
p d

# Date_Object convert string
today = Date.today
str = today.strftime("%Y-%m-%d %H-%M-%S"

だいたいどうでもいい。DateクラスとTimeクラスがある。時間は扱わないのでDateクラスでいいと思う

スポンサーリンク

Rubyでファイル名を連番にする。あるいは日付の連番にする

require "date"

Dir.chdir("../")
count = 0

puts "extension?: "
extension = gets.chomp()
files = Dir.glob("*.#{extension}")

puts "serial_number or date_serial_number? -- (n / d) --  : "
do_pattern = gets.chomp()

if do_pattern == "n"
  files.each do |f|
    if File.file?(f)
      count += 1
      File.rename(f, count.to_s + "." + extension)
    end
  end
elsif do_pattern == "d"
  puts "date? -- ( yyyy-mm-dd ) -- : "
  date = gets.chomp()
  files.each do |f|
    if File.file?(f)
      File.rename(f, date + "." + extension)
      date = Date.parse(date)
      date = date.next_day(1)
      date = date.strftime("%Y-%m-%d")
    end
  end
end

きったねえコード。解説なし。みりゃわかんだろこんなクソコード。

pythonとRubyでどうちがうか?

この記事の一個前の記事では python でファイル名を連番にする。もしくは日付の連番にするコードを書いた。

pythonとrubyでそんなにかわりはないが、rubyには便利なメソッドがたくさんある感じがする。しかし end があるおかげでコードが読みにくい。
波括弧をつかうといろいろ省略できるがあえて do end をつかってみた。こういうのって ブロック っていうんだったか・・・?。

雑感

rubyは便利なメソッドがいろいろあるけど、逆にいろいろありすぎてだるい。

今回つかったのは Dateクラス。Fileクラス。Dirクラス。たいしたことはやってないのにほんとにだるい。やっぱ python のほうが好き。

コメント

タイトルとURLをコピーしました