みずりゅの自由帳

主に参加したイベントやソフトウェア技術/開発について記録しています

Python3でmbox形式のファイルからメッセージを取り出す

備忘メモ。

Python3で「mbox」形式のファイルから1つずつメール(=メッセージ)を取り出すのに利用した方法。

ライブラリ「mailbox」を利用する。
https://docs.python.jp/3/library/mailbox.html

import mailbox

def read_contents(file):
    mbox = mailbox.mbox(file)
    keys = mbox.keys()
    return [(k, mbox.get_bytes(k)) for k in keys]

mbox形式のファイルパスを引数fileで指定し、mbox形式で開く。
keys()でキーを全て取得。
その後、キーを指定してmboxからメッセージをバイナリ形式で取り出している。
これで「メッセージを一意に表すキー」と「対応するメッセージのバイナリデータ」の組み合わせの配列が戻り値となる。
なお、キーは0から始まる連番である。つまり、1通目はキーが0、2通目はキーが1となる。
そのため「N通目以降から取り出したい」という場合なら、「if k >= N -1」をfor文に付与してやる。

    return [(k, mbox.get_bytes(k)) for k in keys if k >= N -1]

メールヘッダの先頭にある"From "の扱い

「mbox.get_bytes(k)」で取得した場合、メッセージの区切りである「メールヘッダの先頭にある"From "(From+半角スペース)」の行が削除されている。
「メールヘッダの先頭にある"From "」の行も欲しかったのでソースコードを確認してみると、クラス「_mboxMMDF」の場合は「def get_bytes(self, key, from_=False):」で定義されていた。なお、「_mboxMMDF」は「mailbox.mbox()」の「__init__」で設定されている。

https://github.com/python/cpython/blob/3.6/Lib/mailbox.py
https://github.com/python/cpython/blob/3.6/Lib/mailbox.py#L789
https://github.com/python/cpython/blob/3.6/Lib/mailbox.py#L835


これにならい、「mbox.get_bytes(k)」を「mbox.get_bytes(k, True)」にして実施してみたところ、「メールヘッダの先頭にある"From "」の行も取得することができた。

import mailbox

def read_contents(file):
    mbox = mailbox.mbox(file)
    keys = mbox.keys()
    return [(k, mbox.get_bytes(k, True)) for k in keys]

余談:
「mbox 固有の動作をするメッセージ」は以下に書かれてもいる。
https://docs.python.jp/3/library/mailbox.html#mailbox.mboxMessage

Python3でforループ式をワンライナーで記述する

備忘メモ。

Python3でforループを書く際、処理が1-2行なら1行(ワンライナー)で記述できる。

例えば、「配列の値」と「その値を2倍した値」を出力したい場合。

keys = [1,2,3,4,5,6,7,8]
for k in keys:
    print(k, k*2)

これは、次のように書ける。

keys = [1,2,3,4,5,6,7,8]
[(print(k, k*2)) for k in keys]

式を"["と"]"でか囲み、さらに実施したい式を"("と")"で囲む。
この時、式は値も返す。また、if文も付与できるので、次のような事もできる。

keys = [1,2,3,4,5,6,7,8]
newkeys = [(k*2) for k in keys if k % 2 == 0]

この場合、「newkeys」は以下となる。

print(newkeys)
--> [4, 8, 12, 16]

Tech-on MeetUp#03「Agile for Developers ~やってみよう!お作法だけじゃないアジャイルレシピ~」に参加した。

2018年11月12日に、Tech-on MeetUp#03「Agile for Developers ~やってみよう!お作法だけじゃないアジャイルレシピ~」に参加してきた。

その内容を簡単にまとめておく。

自分は現在「派遣契約で客先常駐+保守」な日々を送っている。しかし、4−5年前に行ったアジャイルな開発が忘れられずにいる。それもあり、リハビリも兼ねてアジャイル系のイベントには定期的に参加するようにしていた。本イベントの参加もリハビリの一種であったが、懇親会に参加して登壇者と話もできたことで随分と「治療」ができたかなと思っている。

なお、イベント名に「レシピ」が含まれているため、登壇者の好きな「料理」が紹介されると言うお茶目イベントも発生していた。レシピについて熱弁していた司会のお姉さんが微笑ましかった。

 

techplay.jp

続きを読む

ザギンでしーすー。そう、転職LT#3ならね。

2018年11月7日、ワイワイ系転職ノウハウ共有会で有名(?)な「転職LT」に参加してきました。転職LTは今回で3回目の開催とのことですが、回を増すごとに参加者が増えていく非常に有望なイベントとなっています。

主催者の方より「感想を外に出すまでが勉強会」と言われておりますので、それに従って簡単にアウトプットをしておこうと思います。情報源は、Twitter(ハッシュダグ「#jobchanger」)という他力本願でいきます。

 

ex-sier.connpass.com

それと、トレンド入りしたそうです。おめでとうございます。参加者のつぶやき、半端ないですからね。アイコンがもんりぃ先生なのも乙ですね。

 

 

 

 

続きを読む

「エンジニアとして食っていく方法」に参加してきたので内容をまとめてみる。

2018年10月31日、TECH PLAYさんの「エンジニアとして食っていく方法」というイベントに参加してきました。簡単に話の内容をまとめておきます。

主催が「TECH PLAY Academy」さんと言うことで、主にWebエンジニアを目指す人をターゲットになってはいますが、本質的なところはエンジニア全般に言えることかな、と受け取っています。

 

techplay.jp

 

続きを読む

いかにして「本を生やす」のか、それは多くの個人の内なる想いから生えてくる

2018年10月26日、「執筆の技術を勉強する会 #1」に参加してきました。

内容としては、技術書典5で本を出した猛者の方々が「執筆」に特化したアウトプットの仕方について発表をしてくれたものとなります。発表を聞いてて、自分の琴線に触れたキーワードを中心にまとめました。

ちなみに、今回のタイトルについては、登壇者の方々が嬉々として口にしていた「本を生やす(はやす)」から取っています。

 

techplay.jp

なお、「技術同人誌の書き方」については、ほとんどの方が「親方Project」さんの「技術同人誌を書こう!」を薦められていました。
つまり、結論としては「技術同人誌を書こう!」を買って読みましょう、ということですね。電子書籍も色んなところで購入できるようですので、お好きなところでお買い求めください。

 

nextpublishing.jp

会場にも見本が置いてあったので撮影しときました。隣の本は、登壇者の一人の「かめねこ」さんが技術書典5で出されたFreeNASの本です。80部完売とのこと。

 

f:id:mzryuka:20181027003421p:plain

 

続きを読む

東京駅のLINE CREATORS SHOPでうさこ車掌をお出迎え

2018年10月25日、東京駅にうさまるショップが再びオープン。

仕事にも余裕があったので有休をとって行ってきました。楽しい気分を味わえたので、その気分を思い出せるように簡単にまとめておきます。 

なお、お店の正しい名称は「LINE CREATORS SHOP」です。

www.tokyoeki-1bangai.co.jp

しかし、扱っているグッズはうさまる関連のものだけでしたので、「うさまるショップ」って呼んでいいんじゃないかなぁ、とか思っています。

 

続きを読む