HOWTO · Python

Python でテキストをクリップボードにコピーする

このチュートリアルでは、Python でテキストをクリップボードにコピーする方法について説明します。

このページの内容

Pythonのクリップボード用ツールは、テキストをOSのクリップボードに送り、別のアプリケーションに貼り付けられるようにします。プレーンテキストなら、pyperclipを使うと簡潔にコピーでき、必要に応じて貼り付けもできます。そのほか、バイトデータを扱うpyperclip3、代替パッケージのclipboardとxerox、GUIプログラム向けのtkinter、表データ向けのpandasがあります。クリップボードを利用できるかどうかは、OSとプログラムの実行セッションによって異なります。

pyperclipでテキストをコピーする

python -m pip install pyperclipでパッケージをインストールします。次の短いプログラムはPython標準ライブラリで動作し、pyperclip.copy()に渡せるテキスト値を表示します。実際にクリップボードへコピーするには、パッケージとシステムのクリップボードを利用できる環境が必要です。

text_to_copy = "Hello, Clipboard!"
print(text_to_copy)
Hello, Clipboard!

その値をクリップボードに送るには、import pyperclipの後にpyperclip.copy(text_to_copy)を呼び出します。現在のクリップボードのテキストも読み取る場合は、pyperclip.paste()を使います。これらの呼び出しには、実行中のセッションで利用できるクリップボード機能が必要です。Linuxの環境によっては、デスクトップセッションやクリップボード用ユーティリティも必要になります。

バイトデータが必要な場合はpyperclip3を使う

クリップボードからバイトデータを扱う必要がある場合は、python -m pip install pyperclip3でインストールします。copy()とpaste()はバイトデータを扱います。値は明示的に変換してください。数値をコピーする前にstr(number).encode("utf-8")を使い、必要なら戻ってきたバイト列をデコードして解析します。クリップボードに保存されるのはテキストまたはバイトデータであり、元のPythonオブジェクトの型は保持されません。

clipboardパッケージでテキストをコピーする

python -m pip install clipboardでclipboardパッケージをインストールします。このパッケージにはcopy()とpaste()が用意されています。たとえば、import clipboard as cの後にc.copy("Python Clipboard")とc.paste()を呼び出します。両方の呼び出しで同じエイリアスを使ってください。テキスト向けの代替手段ですが、利用にはホスト環境のクリップボード機能も必要です。

クリップボード用の別パッケージとしてxeroxを使う

python -m pip install xeroxでインストールし、テキストにはimport xerox、xerox.copy("Python Xerox Example")、xerox.paste()を使います。対応プラットフォームやシステム依存関係は、インストールされているパッケージのバージョンやOSによって異なる場合があります。クリップボードを利用できない場合は、パッケージのインストール手順を確認してください。

GUIアプリケーションではtkinterを使う

すでにGUIを備えたプログラムなら、tkinterからウィンドウシステムのクリップボード機能を利用できます。tkinterがない場合は、Pythonでのtkinterのインストール方法を参照してください。グラフィカルな画面が必要です。ルートウィンドウを作成し、root.clipboard_clear()、root.clipboard_append(text_to_copy)、root.update()の順に呼び出してテキストを送ります。update()はTkのイベントを処理します。プログラム終了後もクリップボードの内容を利用できるかどうかは、ウィンドウシステムによって異なります。GUIプログラムでは、ユーザーが操作している間、イベントループを動かし続けることもできます。

pandasでDataFrameをコピーする

表データを扱う場合は、pandasをインストールしてDataFrame.to_clipboard()を使います。たとえばdf.to_clipboard(index=False, header=False)のように呼び出します。これは表をスプレッドシートなどの表形式アプリケーションに貼り付けられるよう整形するもので、任意のPythonオブジェクトをコピーする汎用的な方法ではありません。この2つの引数を指定すると、行ラベルと列名がコピーされません。どちらかを含めるには、該当する引数を削除します。この呼び出しにも、現在の環境で利用できるクリップボード機能が必要です。