Python WatchDog - フォルダの監視を行う

特定のフォルダにファイルを置くと自動的になにか処理を行うと便利です。

例えば、ファイルを置くとそれを自動で印刷したり、メールをしたりする場合などです。

今回はWatchDogというライブラリを使って、フォルダを監視する方法をご紹介します。


手順1 ライブラリのインストール

まずは次のコマンドを実行して、WatchDogライブラリをインストールします。

1
pip install watchdog

手順2 コーディング

次の通りコーディングを行います。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
from watchdog.events import FileSystemEventHandler
from watchdog.observers import Observer
import time

class ChangeHandler(FileSystemEventHandler):
# すべてのイベント
def on_any_event(self, event):
print('[全て]',event)

# 作成された時のイベント
def on_created(self, event):
print('[作成]',event)

# 変更されたときのイベント
def on_modified(self, event):
print('[変更]', event)

# 削除された時のイベント
def on_deleted(self, event):
print('[削除]',event)

# 移動した時のイベント
def on_moved(self, event):
print('[移動]',event)

observer = Observer()
# 監視するフォルダを第2引数に指定
observer.schedule(ChangeHandler(), './work', recursive=True)
# 監視を開始する
observer.start()

while True:
time.sleep(5)

WatchDogでは5種類のイベントを監視できます。
メソッド内容
on_any_event全てのイベントを監視
on_created作成イベントを監視
on_deleted削除イベントを監視
on_modified変更イベントを監視
on_moved移動イベントを監視

手順3 実行結果を確認

監視フォルダにファイルを作ったり、削除したり、編集したりすると次のようにイベントを検知することができます。

(例) 実行結果


Windowsでは、ファイルを編集するとイベントが2回連続で発生するようなので注意が必要です。

Python - 2つのフォルダの差を表示する

Pythonでは「dircmp関数」を使うと、2つのフォルダにどのような差異があるのかを簡単に調べることができます。

「dircmp関数」は標準ライブラリなので、インストールをする必要はありません。


コーディング

次のコードでは、2つのフォルダを比較し3種類の差異を表示します。

  • 左のフォルダにだけ存在するファイル
  • 右のフォルダにだけ存在するファイル
  • どちらのフォルダにも存在するが、中身が異なるファイル
    (テキストファイルの場合、ファイル内容の差異を表示します)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import os
import sys
import difflib
from filecmp import dircmp

def view_diff(dcmp):
for name in dcmp.left_only:
print('{}は{}だけに存在'.format(name, dcmp.left))
for name in dcmp.right_only:
print('{}は{}だけに存在'.format(name, dcmp.right))
for name in dcmp.diff_files:
print('{}は両者で異なります({} {})'.format(name, dcmp.left, dcmp.right))

# テキストファイルの場合、ファイル内の差分を表示する。
if name.endswith('.txt') or name.endswith('.html'):
diff_text = difflib.context_diff(open(os.path.join(dcmp.left, name)).readlines(),
open(os.path.join(dcmp.right, name)).readlines())
sys.stdout.writelines(diff_text)

# 再帰的に探す(サブフォルダを探す)
for sub_dcmp in dcmp.subdirs.values():
view_diff(sub_dcmp)

# 比較するフォルダを引数に指定
view_diff(dircmp('./a', './b'))

実行結果

実行結果は下記のようになります。

実行結果


ファイルの存在ありなしや相違のあるファイルに関してきちんと判定されていました。

ただファイル内容の差異表示に関しては、確認しづらくあまり実用的ではないかもしれません。

Twitter APIを使ってPythonからツイートする

Twitter APIを利用するとPythonからツイートしたり、ツイートの一覧を取得したりすることができます。

まずTwitterにサインインしてから次のURLにアクセスします。

Twitterアプリケーション - https://apps.twitter.com/


手順1 アプリケーション登録

Twitter APIを利用するためにはアプリケーションを登録する必要があります。

ブラウザ右上の「Create an app」をクリックします。

アプリケーション作成


アプリケーション情報を登録します。 入力が必須なのは次の4項目です。

①App Name
 アプリケーション名です。ほかのアプリケーション名と被らないように一意にする必要があります。
②Application description
 アプリケーションの説明です。
③URL
 自分のサイトがあればそのURLを入力します。なければ存在しないURLでも問題ありません。
④Tell us how this app will be used
 Twitter関係者へアプリケーションをどのような用途で使うのかを説明するようです。適当でかまいません

アプリケーション登録1

アプリケーション登録2


上記画面で「Create」ボタンを押すと、アプリケーション登録前に開発関連のポリシーへの同意画面が表示されます。

問題なければ「Create」ボタンを押します。

アプリケーション登録確認ダイアログ


手順2 アプリケーション情報確認

アプリケーションが問題なく登録されると下記のようなページに移動します。


登録されたアプリケーション


「Kyes and tokens」をクリックします。

ここではTwitter APIを実行するときに必要なアクセスキーとトークン情報を確認することができます。


アクセスキーとトークン情報


Twitter APIを実行する際に必要な情報は次の4つです。

  • API key
  • API secret key
  • Access token
  • Access token secret

アクセストークンに関しては「generate」または「Regenerate」をクリックすると表示されます。


手順3 Twitterライブラリをインストール

コンソールから次のコマンドを実行し、Twitterライブラリをインストールします。

1
pip install python-twitter

手順4 Pythonからツイート

Pythonで次のコードを実行します。

1
2
3
4
5
6
7
8
9
import twitter

api = twitter.Api(
consumer_key='######',
consumer_secret='######',
access_token_key='######',
access_token_secret='######')

api.PostUpdate('投稿テスト1')

パラメータにはアプリケーション情報から対応したキー情報を設定します。

  • consumer_key
    「API key」を設定
  • consumer_secret
    「API secret key」を設定
  • access_token_key
    「Access token」を設定
  • access_token_secret
    「Access token secret」を設定

実行が成功すると下記のようにTwitterに反映されます。

ツイート結果


手順5 ツイート一覧取得

Twitter APIを使うとツイートだけではなく、ツイート一覧を取得することもできます。

「screen_name」にはツイート一覧を取得するTwitterユーザ名を設定してください。

1
2
3
4
5
6
7
8
9
10
11
import twitter

api = twitter.Api(
consumer_key='######',
consumer_secret='######',
access_token_key='######',
access_token_secret='######')

status = api.GetUserTimeline(screen_name='aiblog1')
for s in status:
print(s.text)

デフォルトで一度に取得できるツイート数は200個です。

ReportLab - PythonでPDFファイルを出力

「ReportLab」というライブラリを使ってPythonからPDFファイルを出力してみます。

ReportLab - https://www.reportlab.com/


手順1 ReportLabをインストール

まず「ReportLab」をインストールします。

1
pip install reportlab

手順2 PDFを出力

一番簡単にファイル出力するコードは下記の通りです。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from reportlab.pdfgen import canvas
from reportlab.lib.units import inch, mm, cm
#from reportlab.pdfbase import pdfmetrics, ttfonts

# A4サイズで「output.pdf」というファイルを出力
pdf = canvas.Canvas('output.pdf', pagesize=(210 * mm, 297 * mm))

# 原点は左上ではなく左下
pdf.drawString(10 * mm, (297 - 10) * mm, 'PDF OUTPUT TEST')

# 改ページ
pdf.showPage()

# ファイルに保存する。
pdf.save()

上記のコードを実行すると、次のようなPDFファイルが出力されます。

出力したPDFファイル


文字だけでなく、画像を埋め込んだり表を書いたりもできます。

pdfminer3k - PDFからテキストを抜き出す。

PythonでPDFからテキストを出力してみます。

「pdfminer3k」というライブラリを使います。


手順1 pdfminer3kをインストール

まず「pdfminer3k」をインストールします。

1
pip install pdfminer3k

手順2 PDFからテキストを出力

Pythonがインストールされているフォルダ配下のScriptフォルダに「pdf2txt.py」というユーティリティ・プログラムが置かれます。

このプログラムを使ってPDFからテキストを出力します。

ネット上にあったシンプルなPDFファイルをダウンロードし入力としました。


1
python pdf2txt.py 7a79c35f7ce0704dec63be82440c8182.pdf

上記のように実行すると、PDFファイルをテキスト化したものが画面に表示されます。

スクリーンショットを撮影して保存する

画面のスクリーンショットをとる場合、「PrtSc」キーを押すことはよく知られています。

ただこれをファイルに保存する場合、いったん「ペイント」などのソフトに貼り付けてからファイル保存をする必要があり少々手間がかかります。

そこで今回はショートカットキーを使って一発でスクリーンショットをファイルに保存する方法をご紹介します。


手順1 スクリーンショットを撮影して保存

[Win + PrtSc]を押します・・・・・これだけです。

ファイルの保存先は「ピクチャ」フォルダの中の「スクリーンショット」フォルダです。

PNG形式で、ファイル名は自動的に連番が降られて保存されます。

とても簡単なので一度試して頂ければ幸いです。

(ただ画面全体の保存にしか対応していないのが少々残念です)

Python/Selenium - 自動的にWebサイトの画面キャプチャを撮る

PythonとSeleniumを使ってWebサイトの画面キャプチャを撮ってみます。


手順1 Seleniumを準備

pipコマンドを使って、「Selenium」をインストールします。

1
pip install selenium

手順2 WebDriverを準備

下記サイトからChromeDriverをダウンロードし、パスが通った場所に格納します。

ChromeDriver - ダウンロードはこちらから

ChromeDriverのバージョンは、各環境にインストールされているChromeブラウザのバージョンと合わせる必要がありますので注意して下さい。


手順3 Pythonプログラムを作成

Pythonで実装します。

1
2
3
4
5
6
7
8
9
import time, selenium.webdriver

driver = selenium.webdriver.Chrome()
driver.set_window_size(1024, 768)

driver.get('http://www.google.com')
time.sleep(5)
driver.save_screenshot('screenshot.png')
driver.quit()

手順4 実行

実行するとChromeブラウザが起動され、スクリーンショットが撮られます。

下記が自動的に取得されてたスクリーンショット画像です。

スクリーンショット


URLをリスト化して複数のWebサイトを自動的に取得するなどいろいろ応用ができると思います。

サクラチェッカー - サクラ(やらせ)レビューをチェックする

このごろ話題になっているAmazonでの「サクラレビュー」。

今回はサクラレビューを判定するサイトをご紹介します。

サクラチェッカー - https://sakura-checker.jp/

サクラチェッカーでは「サクラ度」のほかに下記の注意度を判定することができます。

  • 価格&製品
  • ショップ情報&地域
  • ショップレビュー
  • レビュー分布
  • レビュー日付
  • レビュー&レビューア

手順1 サクラチェッカーを開いて検索

ブラウザを開き上記リンクからサクラチェッカーを開きます。

検索


入力欄にAmazonの製品URLまたは商品名を入力します。

今回は私が持っている「Aero Book」で検索してみます。

1年ほど前に購入したときは55,000円だったので少し値下がりしたようです。
type-Cで充電できるのが意外とうれしいです。


手順2 サクラ度判定

サクラ度判定結果は以下の通りです。


判定


サクラ度90%・・・・なるほどなるほど、中華製品ですからね。別に気にしませんよ。 レビューの結果は「1.71」でAmazonでは「3.8」だったのでかなり低いスコアです。

まー個人的には普通に使えてるし、値段の割にはスペック高めでサクサク動くのでレビュー低くてもショックじゃありません。 ( T T )

ただキーレイアウトに慣れないのとバッテリーがあまり持たないことがやや不満でしょうか。

サクラ度(注意度)の詳細分析も出ています。
「ショップレビュー」と「レビュー&レビュア」が特に気にすべき項目になるでしょうか。
(思いっきり危険度95%となっているんですが・・・)

ネットプリント - プリンターがないけど印刷したい!

急ぎの用事で資料を印刷したいのに、インク切れア故障でプリンターが使えない場合、セブンイレブンの「ネットプリント」を活用して印刷することができます。

ネットプリント - https://www.printing.ne.jp/index_p.html


手順1 ネットプリントを開く

上記URLより「ネットプリント」へ移動し、「ユーザ登録なしでプリントする」をクリックします。

ユーザ登録選択画面


手順2 ファイル登録前

「今すぐファイル登録」をクリックします。

ネットプリントファイル登録前画面


手順3 同意書

「同意する」にチェックを入れ、「利用を開始する」をクリックします。

同意画面


手順4 ファイル新規登録

①プリント用紙を選択し、②で印刷するファイルを登録します。

次に③用紙サイズを選択し、④「登録する」ボタンをクリックします。

(その他の選択は必要に応じて行ってください。)

ファイルの新規登録


正常にファイル登録ができると下記のダイアログが表示されます。

ファイル登録 受付完了


手順5 ファイル登録履歴

登録したファイルがファイル登録履歴に表示されるので、プリント予約番号をメモしておきます。

予約番号はメールで通知しておくこともできます。

ファイル登録履歴


手順6 セブンイレブンに行って印刷

セブンイレブンのマルチコピー機で、「プリント」→「ネットプリント」を選択し「プリント予約番号」を入力すると登録したファイルを印刷することができます。

Enhancer for YouTube - Youtubeの機能を大幅に拡張

動画系の拡張機能を使うと本来そのサイトでは操作できないことも簡単に行えるようになり便利です。

今回はYoutubeをよく見る人に嬉しい拡張機能を提供するChormeプラグインをご紹介します。

Enhancer for YouTube - インストールはこちらから

「Enhancer for YouTube」は、別ウィンドウでの動画再生やシアターモード、動画再生スピードの変更など、便利な機能を多く追加できます。


手順1 インストール

Chromeを起動し上記リンクに移動し、「Enhancer for YouTube」をインストールします。

インストール


手順2 設定

インストールが完了するとChromeのウィンドウ左上に「Enhancer for YouTube」のアイコンが表示されます。

Chromeのツールバー


上記アイコンをクリックすると、設定ページが表示されます。

設定ページでは、ツールバーの表示カラーやアイコンの表示などをカスタマイズすることができます。

設定ページ


手順3 動画再生

Youtubeに移動し、動画を再生するとウィンドウ最下部に下記のようなツールバーが表示されます。

ツールバー


上記は初期設定で表示されるアイコンですが、右から以下のような機能を提供します。
  • 広告を削除
  • シネマモード
  • プレイヤーをリサイズ
  • プレイヤーを切り離す
  • 音量ブースト
  • ループ
  • 再生速度変更
  • オプション