kouzukek.info

adiaryの標準datファイルをソートする

動作保証はありません。
#!/usr/bin/env python3

from pathlib import Path
import re

re_terminate = re.compile("<<(.*)$")

def sortdat(f):
    with f.open() as fin:
        s = fin.read()

    kvs = []

    lines = s.split("\n")

    cur = 0

    while cur < len(lines):
        if len(lines[cur]) == 0:
            cur += 1
            continue
        if not "=" in lines[cur]:
            return
        if lines[cur].startswith("*"):
            line = lines[cur]
            terminate = re_terminate.search(line).group(1)
            i = cur + 1
            while not terminate in lines[i]:
                i += 1
            kvs.append("\n".join(lines[cur:i+1]))
            cur = i
        else:
            kvs.append(lines[cur])
        cur += 1

    with f.open("w", encoding="utf8") as fout:
        fout.write("\n".join(sorted(kvs)) + "\n")

if __name__ == "__main__":
    for f in Path("/usr/local/apache2/htdocs").glob("**/*.dat"):
        sortdat(f)
73/75