Skip to content

Instantly share code, notes, and snippets.

@kotoripiyopiyo
Created December 25, 2020 15:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kotoripiyopiyo/93104ee6d22d1ce8c0340268d846a0a6 to your computer and use it in GitHub Desktop.
Save kotoripiyopiyo/93104ee6d22d1ce8c0340268d846a0a6 to your computer and use it in GitHub Desktop.
ファイル名の米国風日付部分を日本付日付に変える
#! Python3
# renameDates.py 米国式日付MM-DD-YYYYを日本式日付YYYY-MM-DDに書き換える
import shutil
import os
import random
import re
import string
# ランダムな日付や文字列が入ったファイルを大量生成する。不要ならコメントアウト
# 拡張子作成
extension_list = ['txt', 'docx', 'jpg', 'pdf']
# ディレクトリ作成
pj_path = './chapter09/project01'
os.makedirs(pj_path, exist_ok=True)
# ファイル名生成のための元文字列生成
str_all = f'{string.digits}{string.ascii_letters}'
def random_all(str_num):
# str_numで指定した文字数の文字列を作る
# 文字+日付、日付+文字、文字のみ、日付のみの4つの文字列を returnで返す
str_list = [random.choice(str_all) for _ in range(random.randint(2, str_num))]
rd_name = ''.join(str_list)
rd_mm = random.randint(1, 12)
rd_dd = random.randint(1, 31)
rd_year = random.randint(1972, 2020)
rd_ext = extension_list[random.randint(0, 3)]
random_filename_fromstr = f'{pj_path}/{rd_name}{rd_mm}-{rd_dd}-{rd_year}.{rd_ext}'
random_filename_fromnum = f'{pj_path}/{rd_mm}-{rd_dd}-{rd_year}{rd_name}.{rd_ext}'
random_filename_onlystr = f'{pj_path}/{rd_name}.{rd_ext}'
random_filename_onlynum = f'{pj_path}/{rd_mm}-{rd_dd}-{rd_year}.{rd_ext}'
return random_filename_fromstr, random_filename_fromnum, random_filename_onlystr, random_filename_onlynum
# random_allで作った文字列で「4*range」で指定した数のファイルを作る
for i in range(100):
file_names = random_all(10)
filename1 = open(file_names[0], 'w')
filename2 = open(file_names[1], 'w')
filename3 = open(file_names[2], 'w')
filename4 = open(file_names[3], 'w')
filename1.close()
filename2.close()
filename3.close()
filename4.close()
# 米国式日付のファイル名にマッチする正規表現を作る
dates_regex = re.compile(r'''(
^(.*?) #日付前の全文字 mo.group(2)
((0|1)?\d)- #月 mo.group(3)
((0|1|2|3)?\d)- #日 mo.group(5)
((19|20)\d\d) #年 mo.group(7)
(.*?)$ #日付後の全文字 mo.group(9)
)''', re.VERBOSE)
# ファイル名一覧のリストを取得し、正規表現マッチしたら日付を日本式に変更
file_list = os.listdir(pj_path)
for i in file_list:
m = dates_regex.search(i)
if m is None:
continue
else:
rename = m.group(2) + m.group(7) + '-' + m.group(3) + '-' + m.group(5) + m.group(9)
filepath_original = pj_path + '/' + i
filepath_rename = pj_path + '/' + rename
print(f'リネーム:「{filepath_original}」を「{filepath_rename}」に。')
shutil.move(filepath_original, filepath_rename)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment