2019年7月4日木曜日

開発環境

退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング (Al Sweigart(著)、相川 愛三(翻訳)、オライリージャパン)の第Ⅱ部(処理の自動化)、9章(ファイルの管理)、9.7(演習プロジェクト)、9.7.3(連番の飛びを埋める)の解答を求めてみる。

コード

Python 3

#!/usr/bin/env python3
import os
import re
import sys

try:
    directory = sys.argv[1]
    prefix = sys.argv[2]
except Exception as err:
    print('usage: directory prefix')
    sys.exit(1)

pattern = re.compile(r'^' + prefix + r'(\d+)(.*)$')
filenames = []
suffixes = []
start = None
start_len = None
os.chdir(directory)
nums = []
for filename in sorted(os.listdir('.')):
    if os.path.isfile(filename):
        m = re.match(pattern, filename)
        if m:
            if start is None:
                start = int(m.group(1))
                start_len = len(m.group(1))
            filenames.append(filename)
            suffixes.append(m.group(2))

for i, (filename, suffix) in enumerate(zip(filenames, suffixes), start):
    os.rename(filename, f'{prefix}{i:0>{start_len}d}{suffix}')

入出力結果(Bash、cmd.exe(コマンドプロンプト)、Terminal、Jupyter(IPython))

$ tree tmp
tmp
├── spam001.txt
└── spam003.txt

0 directories, 2 files
$ ./sample3.py tmp spam
$ tree tmp
tmp
├── spam001.txt
└── spam002.txt

0 directories, 2 files
$ 

0 コメント:

コメントを投稿