- 1. 概要
- 2. ファイルの構成
- 3. モジュール
1. 概要
「.ini」ファイルは、古い形式ですよ、ってことで。
パラメータファイルを「.ini」から「.json」へ変更することにしました。
「.ini」や「.json」に関しては、「テキストファイル形式」をご参照ください。
「.json」も「.json5」形式の方が使いやすいので、そちらを使うようにします。
「.json5」のパーサは、「pip」でインストールできます。
「FreeBSD」であれば、「ports」「pkg」に、「py-json5」のパッケージがあります。
2. ファイルの構成
「.ini」で、下記のように記述していたものを(結局、複数書くとやたら行数の長いファイルになります)
[セクション名]
dirname = ディレクトリの絶対パス
extname = 設定するファイルの拡張子をホワイトスペースで区切って列挙
setdate = 更新日付として設定する日付を指定
「.json」で下記のように記述します。
{
"セクション名に書いていたもの": { dirname: "ディレクトリの絶対パス", extname: "設定するファイルの拡張子", setdate: "更新日付として設定する日付を指定", },
"...": { dirname: "ディレクトリの絶対パス", extname: "設定するファイルの拡張子", setdate: "更新日付として設定する日付を指定", },
}
これで、項目を増やすのも楽になりました。
3. モジュール
いささか試行錯誤しましたが(実は、前項のファイルの書き方が一番時間をとった)。
こんな感じになりました。
import os
import time
import json5
os.chdir(os.path.dirname(__file__)) # モジュールの位置にディレクトリを移動
config = None
with open('update.json') as f:
config = json5.load(f)
def find_all_files(directory): # 元となるディレクトリより配下のファイルを収集する
for root, dirs, files in os.walk(directory):
yield root
for file in files:
yield os.path.join(root, file)
for key, value in config.items():
dirname = value['dirname']
extname = value['extname']
setdate = value['setdate']
atime = mtime = time.mktime(time.strptime(setdate, '%Y%m%d'))
for file in find_all_files(dirname):
root, ext = os.path.splitext(file)
if (ext == '.' + extname):
os.utime(file, (atime, mtime))
くっきり動作します(ちゅうか、運用しておりますぞよ)。
|