Action disabled: backlink
このページの翻訳:

Pythonで遊ぼう

Macを想定していますが,Windowsでも似たような感じでできます.

とりあえず必要そうなもの

tkinterはGUI作成のライブラリなので,あってもなくてもいいけど, あるとそれっぽいアプリが作れそうです. 標準ライブラリなので,たぶん入ってる.確認は以下.

python -m tkinter

次にバイナリにするためのpy2appをインストール

pip install py2app

で,ここでなんかpy2appletが見つからないとか言われたので,

echo 'export PATH="$HOME/Library/Python/2.7/bin:$PATH"' >> ~/.bash_profile

こんな感じでパスを通してあげた気がする.
あとは,作っておいたhoge.pyとかを

py2applet --make-setup hoge.py
python setup.py py2app

とかすれば即興のアプリの完成です.

メールの抽出(エクセルファイルに)

import os
import glob
import email
from email import policy
from email.parser import BytesParser
from openpyxl import Workbook, load_workbook
from datetime import datetime
 
# Jrecディレクトリのパス
jrec_dir = r"C:\\Users\\username\\ドキュメント\\Jrec"
 
# Excelファイルのパス
excel_file = r'C:\\Users\\username\\ドキュメント\\jrecmail\\202408_jrec.xlsx'
 
# Jrecディレクトリ内の.emlファイルを取得
eml_files = glob.glob(os.path.join(jrec_dir, '*.eml'))
 
# Excelファイルを読み込むか新規作成
if os.path.exists(excel_file):
    wb = load_workbook(excel_file)
else:
    wb = Workbook()
    # デフォルトのシートを削除(新規作成の場合のみ)
    if 'Sheet' in wb.sheetnames:
        del wb['Sheet']
 
# .emlファイルを処理
for eml_file in eml_files:
    with open(eml_file, 'rb') as f:
        msg = BytesParser(policy=policy.default).parse(f)
 
    # 日付を取得し、2024年の8月のメールのみ処理
    date = msg['date']
    date_obj = email.utils.parsedate_to_datetime(date)
 
    if date_obj.year == 2024 and date_obj.month == 8:
        sheet_name = date_obj.strftime('%m%d')
 
        # シートが存在しない場合は新規作成
        if sheet_name not in wb.sheetnames:
            wb.create_sheet(sheet_name)
        ws = wb[sheet_name]
 
        # メールの本文を取得
        body = msg.get_body(preferencelist=('plain')).get_content().strip()
 
        # 本文を改行で分割し、1行ずつ別々のセルに書き込む
        body_lines = body.split('\n')
        for line in body_lines:
            ws.append([line])
 
# Excelファイルに保存
wb.save(excel_file)

メール件数のカウント

from openpyxl import load_workbook
from openpyxl.utils import get_column_letter
from openpyxl.styles import Alignment
 
# Excelファイルのパス
excel_file = r'C:\\Users\\username\\ドキュメント\\jrecmail\\202408_jrec.xlsx'
 
# Excelファイルを読み込む
wb = load_workbook(excel_file)
 
# Sheet1に結果を出力する
sheet1 = wb['Sheet1']
 
# タイトルを設定
sheet1['A1'] = 'シート名'
sheet1['B1'] = '[NEW]の数から1を引いた結果'
 
# 各シートで[NEW]のカウントを行い、結果をSheet1に出力する
row_index = 2  # 出力する行の開始位置
 
for sheet_name in wb.sheetnames:
    ws = wb[sheet_name]
    count = 0
 
    # シート内のセルを走査して[NEW]のカウントを行う
    for row in ws.iter_rows():
        for cell in row:
            if isinstance(cell.value, str) and 'NEW' in cell.value:
                count += cell.value.count('NEW')
 
    # [NEW]の数から1を引いた結果をSheet1に出力する
    sheet1[f'A{row_index}'] = sheet_name
    sheet1[f'B{row_index}'] = count - 1
 
    row_index += 1
 
# セルのフォーマット設定
for col in range(1, 3):
    sheet1.column_dimensions[get_column_letter(col)].width = 20
    for row in range(1, row_index):
        sheet1.cell(row=row, column=col).alignment = Alignment(horizontal='center')
 
# Excelファイルを保存
wb.save(excel_file)
 
# Excelファイルを閉じる
wb.close()
python.txt · 最終更新: by doctor_no_hito
CC Attribution-Noncommercial-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0