Evernoteがエクスポートした.enexファイルの更新日時を作成日時に書き換えるPythonプログラム

以下の機能を持つPythonプログラムを書いてください。Evernoteのノートブックをエクスポートしてできた.enexファイル(XML形式)を読み込んで、<created></created>タグ間の値を覚えておき、直後に出現する<updated></updated>タグ間の値を先ほど覚えておいたものに書き換える。タグは複数あるのでその都度同じ処理を繰り返す。ファイルサイズは数百MBと大きいので、行ごとに処理しつつ新しいファイルに書き出すようにしてください。

ChatGPTの回答:

このPythonプログラムは、.enexファイルを行ごとに読み込み、<created>タグ内の値を覚えておき、その直後に出現する<updated>タグ内の値をその覚えておいた値に書き換えた後、新しいファイルに書き出します。以下のコードを参照してください。

def process_enex_file(input_file, output_file):
    import re

    created_pattern = re.compile(r'<created>(.*?)</created>')
    updated_pattern = re.compile(r'<updated>(.*?)</updated>')

    with open(input_file, 'r', encoding='utf-8') as infile, open(output_file, 'w', encoding='utf-8') as outfile:
        created_value = None

        for line in infile:
            created_match = created_pattern.search(line)
            if created_match:
                created_value = created_match.group(1)
            
            if created_value:
                line = updated_pattern.sub(f'<updated>{created_value}</updated>', line)
            
            outfile.write(line)

if __name__ == "__main__":
    input_file = 'path_to_your_input_file.enex'
    output_file = 'path_to_your_output_file.enex'
    process_enex_file(input_file, output_file)

このプログラムの動作手順は以下の通りです:

  1. .enexファイルを行ごとに読み込みます。
  2. <created>タグの値を見つけた場合、その値を覚えておきます。
  3. <updated>タグを見つけた場合、その値を覚えておいた<created>タグの値で置き換えます。
  4. 変換された行を新しいファイルに書き出します。

注意点:

  • 入力ファイルと出力ファイルのパスを適切に指定してください。
  • .enexファイルのサイズが大きい場合でも、行ごとに処理することでメモリ使用量を抑えています。

なぜかノートブック内の一部のノートの更新日時が、更新していないにも関わらず変な日時になっていたので困っていました。.enexファイル内のすべての更新日時を本ツールで作成日時に書き換えた後、Evernote2Onenoteツールを使って無事にEvernoteからOneNoteへのデータ移行が完了しました。さようならEvernote。