Created
December 25, 2020 15:22
-
-
Save kotoripiyopiyo/93104ee6d22d1ce8c0340268d846a0a6 to your computer and use it in GitHub Desktop.
ファイル名の米国風日付部分を日本付日付に変える
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#! 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