6
13

More than 5 years have passed since last update.

せっせとコピーしたテキストを、せっせと書き換える Python3+pyperclip

Last updated at Posted at 2017-07-06

企画

コピーした文章を定期的に書き換えるという無駄を極めたプログラムが書きたくなったのでやってみる。
ソースコードがめちゃくちゃ短いので多分初心者向け。

手順を考える

  1. コピーされているテキストを取得
  2. 書き換える
  3. クリップボードに貼りつけ
  4. 定期的に繰り返す

ただし書き換える内容は一部だけにする。

環境

  • Windows10
  • Python 3.5.2 |Anaconda 4.2.0 (64-bit)

やってみよう!

pyperclipを使ってみる

まずクリップボードにコピーした文章を取得する。
これにはpyperclipを使えばいい。

コマンドプロンプト
pip install pyperclip 

とコマンドプロンプトに打ち込むとインストールできるはず。
先ほどの文章をコピーしてプログラムを実行してみよう。

sample01.py
import pyperclip, re

copy_text = str(pyperclip.paste())
print(copy_text)
実行結果
だが全てを書き換えてしまっては明らか過ぎて面白くない。
では一部だけ変更するようしてはどうだろうか。

コピーしたテキストを取得することには成功したので、逆にテキストをクリップボードにコピーしてみる。

sample02.py
copy_text = 'hello world!'

print(copy_text)
pyperclip.copy('\n'.join(copy_text))
実行結果
私の名前はAliceです
hello world!

書き換える

それではコピーしたテキストを書き換えていこう。

全てを変更すると面白くない(そもそもテキストを取得する必要すらない)ので、一部だけ変更したい。例えば数字。
数字が出てきたらランダムな数字に置き換えてしまおう。

コピーする文章は日本語である場合が多いと思うので、アルファベットも変更しよう。こちらは特定の文字列が出現したときのみ書き換えることにする。

sample03.py
import pyperclip, re

copy_text = str(pyperclip.paste())
print(copy_text)

new = re.sub(r'[\d]', '*', copy_text)
new = re.sub(r'day|best|hello', '****', new)

if len(copy_text) > 0:
    pyperclip.copy('\n'.join(new))
    print('Rewrite:', new)
else:
    print('Nothing')

re.subで文字列の置換。r' 'は正規表現。
本当はランダムな数字で置き換えたり、ランダムな文字列に変更したりを考えていたのだけれど、上手くいかなかった。きっと誰かがうまいこと考えてくれることを期待しよう。

実行結果
I will do my best day to day!
Rewrite: I will do my **** **** to ****!

ちなみにコピーした英文は「今日も一日頑張るぞい!」のGoogle翻訳。
NewGame二期楽しみだぞい。

定期的に起動

最後のオシゴト。
ThreadからThreadを実行することで5秒おきに実行することにする。
なお、前述までのプログラムを一部変更した。

copyChange.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

u"""Hoge クリップボードのテキストを勝手に書き換え
      例文:I will do my best day to day 2017!
"""

import pyperclip, re, threading, random


def task():
    copy_text = str(pyperclip.paste())

    new = re.sub(r'[\d]', str(random.randint(0, 9)), copy_text)
    new = re.sub(r'day|best|hello', '****', new)

    if len(copy_text) > 0:
        pyperclip.copy(''.join(new))
        print('---Rewrite Complete!---')
    else:
        print('---Failure---')
    th = threading.Timer(5, task)
    th.start()

t = threading.Thread(target=task)
t.start()

定期的に繰り返していることがわかるようにrandomを使って数字を変更するように書き換えた。同時に例文にも2017が追加されている。
また、実行するときにコピーした文章がprintされるのも邪魔なので消した。

実行結果
---Rewrite Complete!---
---Rewrite Complete!---
---Rewrite Complete!---
クリップボード
I will do my **** **** to **** 4444!
I will do my **** **** to **** 7777!
I will do my **** **** to **** 8888!

ここまでお疲れさまでした。

おまけ

このプログラムは起動しない限りクリップボードが書き換えられない。
そこでさらに凶悪度を増すために自動で起動させる方法を提示しておく。

今回はWindows想定なのでタスクスケジューラを使えばいい。
他のOSでもそれぞれ自動起動の方法があると思うため、自分のPCに苛められたい人はぜひ検索して試してみるといいだろう。
タスク スケジューラを起動する

コマンドプロンプトでもschtasksで出来るかも。
使ったことないしわからないけれど。

参考資料

お詫び

  • コードが正しく表示されていないという編集リクエストをいただきました。現在は修正済みです。kobitoでは表示されていても、Qiitaでは上手くいってないこともあるのですね。ご報告・訂正、ありがとうございました。
6
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
13