ID ManagerのエクスポートデータをBitwardenにインポートするための整形スクリプト

ID Managerがいつまで使えるかっていうのもあって移行先としてとりあえずBitwardenを試してみることに。

ID Managerからエクスポートしたcsvをそのまま突っ込めないですが、手作業でチマチマ整形なんてやってられっか。
ということで整形するスクリプトの出番です。

import csv

input_file = 'idm_export.csv'
output_file = 'bitwarden_import.csv'

bitwarden_headers = [
    'folder', 'favorite', 'type', 'name', 'notes', 'fields',
    'login_uri', 'login_username', 'login_password', 'login_totp'
]

with open(input_file, 'r', encoding='shift_jis') as infile, \
     open(output_file, 'w', newline='', encoding='utf-8') as outfile:

    reader = csv.DictReader(infile)
    writer = csv.DictWriter(outfile, fieldnames=bitwarden_headers)
    writer.writeheader()

    current_folder = ''

    for row in reader:
        item_type = row.get('Folder or Item', '').strip().lower()

        if item_type == 'f':
            current_folder = row.get('Title', '').strip()

        elif item_type == 'i':
            name = row.get('Title', '').strip()
            username = (row.get('Account ID') or row.get('e-mail') or '').strip()
            password = (row.get('Password') or '').strip()
            url = (row.get('URL') or '').strip()
            notes = (row.get('Comment') or '').strip()

            bw_row = {
                'folder': current_folder,
                'favorite': '0',
                'type': 'login',
                'name': name,
                'notes': notes,
                'fields': '',
                'login_uri': url,
                'login_username': username,
                'login_password': password,
                'login_totp': ''
            }

            writer.writerow(bw_row)

print(f'変換完了: {output_file}')

という感じで変換したら上手く取り込めたようです。