🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Automator

Automatorは、作業を自動化するワークフロー構築ソフトウェア。Macに標準で搭載されています。ドラッグ&ドロップ操作で自動化レシピを作成。任意のショートカットキーで実行することが可能です。

PyAutoGUI

PyAutoGUIは、Windows、Mac OS、Linuxに対応した、Python用のGUI自動化ライブラリです。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

コピー

元のオブジェクトを破壊することなく、オブジェクトの複製を生成することをコピーと呼びます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

3585閲覧

pythonで改行箇所をShift+Enterに置き換えたい

atrook

総合スコア18

Automator

Automatorは、作業を自動化するワークフロー構築ソフトウェア。Macに標準で搭載されています。ドラッグ&ドロップ操作で自動化レシピを作成。任意のショートカットキーで実行することが可能です。

PyAutoGUI

PyAutoGUIは、Windows、Mac OS、Linuxに対応した、Python用のGUI自動化ライブラリです。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

コピー

元のオブジェクトを破壊することなく、オブジェクトの複製を生成することをコピーと呼びます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/02/20 05:29

前提・実現したいこと

PCのテキストでメール内容を執筆した後、
ウェブサイト上のメール本文へコピー・ペーストするのですが、
下の通り

「改行の幅」が広がってしまい困っています。
(「Enter」で改行すると幅が広がってしまう仕様のようです)

この改行の幅を狭めるためにはウェブサイト上で
一度、改行を削除して
「Shift+Enter」で改行すると
通常通りの改行の幅に戻ります。

しかし、
全部の改行をウェブサイト上で

「改行削除」→「Shift+Enter」

と、繰り返していくのは非常に手間がかかるため
かじっているPythonで自動化できないかと考えました。

具体的には

1,テキストから文章をコピー
2,ウェブサイト上でペースト
3,改行を削除
4,Shift+Enterで改行

3と4を自動化したいです。

発生している問題・エラーメッセージ

実現方法が分からない

試したこと

1、改行箇所を探す
2、見つけたら改行を削除し、キーボード操作でShift+Enterを入力する
という処理をPyautoguiでどうにかできないかと考えましたが、
サイトの入力フォーム上にあるテキストで改行を探す処理の書き方がわからず挫折しました。

Automatorの使用も検討しましたが、知識がなく実現できませんでした。

補足情報(FW/ツールのバージョンなど)

実行環境はmacで、macOS Big Sur バージョン11.2です

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TakaiY

2021/02/20 08:12 編集

これ、よく目にする問題なのですが、利用しているメーラと、ブラウザ経由であればそのブラウザの情報を教えていだたけますか?
atrook

2021/02/20 09:16

メール配信サービスは、「convertkit」で、ブラウザは主にchromeを使っています。 よろしくお願いします!
Daregada

2021/02/20 09:55

HTMLメールになっていて、Enterを入力すると現在のパラグラフが終了して次の内容が新たなパラグラフになり、Shift-Enterだと改行(<br>を挿入)して同じパラグラフが継続してるんじゃないかな。
atrook

2021/02/20 10:07

Daregadaさん その通りだと思います。 作成してある下書きをメーラーにコピペした際に、改行がパラグラフを新たに作成する扱いになってしまうので現在は手作業で改行をShift+Enterに置き換えています。 この作業をプログラムに置き換えたいのです。
guest

回答2

0

すでに解決されているので屋上屋の類になりますが、AutomatorとPythonを使った方法でも作ってみましたので、質問者さんの実際の環境で動作するかどうか、もしよかったらお試しいただけますか?
私の環境にはEnterとShift+Enterを区別して別の動作をするアプリとして、Word.appとDiscord.appがありましたのでこれらで試してみましたが、Word.appでは期待通り動作するもののDiscord.appでは望んだ結果とならず、でした。

【作り方】

  1. Automator.app を起動します
  2. ファイル選択ウィンドウで「新規書類」をクリックします
  3. 書類の種類として「クイックアクション」を選択してから「選択」をクリックします
  4. 左側の [アクション] タブの [ライブラリ] の中から「ユーティリティ」を選択します
  5. 表示されたアクションの中から「シェルスクリプトを実行」を選択して右側にドラッグ&ドロップします(もしくはアクションをダブルクリックして追加します)
  6. 「シェル:」のドロップダウンメニューから「/usr/bin/python」を選択します
  7. 「入力の引き渡し方法:」のドロップダウンメニューから「引数として」を選択します
  8. テキストエリアに表示されている

import sys
for f in sys.argv[1:]:
print f
というスクリプトを、次のように書き換えます
import re
import sys
text = re.sub(r"(.+?)\n", r"\1\v", sys.argv[1])
text = re.sub(r"\v\n", r"\n", text)
print(text)
9. 左側のアクションの中から「クリップボードにコピー」を選択して、先程の「シェルスクリプトを実行」の下にドラッグ&ドロップします
10. 左側のアクションの中から「シェルスクリプトを実行」を選択して、「クリップボードにコピー」の下にドラッグ&ドロップします
11. テキストエリアに次のように入力します
pbpaste | pbcopy
「シェル:」は「/bin/zsh」のままで、「入力の引き渡し方法:」は「stdinへ」のままでいいです
12. メニューバーから「ファイル」>「保存...」を選択します
13. 「クイックアクションの名前:」に、自分でわかりやすい名前を入力して「保存」をクリックします。ここでは「Shift + Enter に変換」としました。

完成時のAutomator.appの画面

【使い方】

  1. テキストエディット.appなどで入力済みのテキストを Control + A ですべて選択します
  2. 選択したテキストの上で右クリックして表示されるコンテクストメニューの中から「サービス」>「Shift + Enter に変換」を選択します
  3. 変換されたテキストがクリップボードにコピーされますので、ブラウザのメール入力欄でペーストします

空行があったら段落の切れ目を示すものとみなして、空行を削除した上で直前の行末をEnterにしています。

投稿2021/02/21 03:56

etherbeg

総合スコア1195

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

atrook

2021/02/21 07:00 編集

Automatorを使った方法ありがとうございます! こちらの方がスマートですね! 非常に勉強になります。 正規表現による置き換えでしょうか。正規表現についても勉強しようと思います。 ただ、私の環境ではwordとメーラーにて試したところ、改行が一つ多く入ってしまいました。 行末に普通の改行が入り、その下はShift + Enter で改行されています。 行末の改行をなくすにはどうしたらいいのでしょうか?
etherbeg

2021/02/21 07:32

正規表現は私が掲出したものと一字一句同じになっているでしょうか。基本的なことで恐縮ですが、他に特に思い当たることがないので、一度確認いただければと思います。
atrook

2021/02/21 13:12

office wordに書いた文字を、 選択したテキストの上で右クリックして表示されるコンテクストメニューの中から「サービス」>「Shift + Enter に変換」を選択 していたのですが、 掲出いただいたようにテキストエディットに書いた文字の上で実行すると、 想定した結果となりました! ご迷惑おかけして申し訳ありません。 やはり機能の多いWord上とシンプルなテキストエディタでは何か扱いが違うのでしょうか。こちらの無知でした。
etherbeg

2021/02/21 14:15

いえいえ、原因がわかってよかったです。ほっとしました。 私も先にコメントいただいたときに、Wordの上でやったらどうなるかなあと思ってやってみたのですが、私の環境ではエラーになってそもそも実行できなかったので、可能性から除外してしまっていました。 同じMacなのに挙動が違う(しかも一方はエラーなのに一方は一応は動作する)のは少し気になりますね。何か見落としているものがあるのかもしれません。 Wordでコピペしたらフォントとかサイズとか字体とかそういったものも一緒にコピペされるので、Wordからコピーした時点ではシンプルなテキストデータでないのは間違いないですが、それが原因かどうかもちょっと分からないですね。 すっきりとした解決を提供できず申し訳ないですが、こんなのでも何かの参考になればさいわいです。
guest

0

自己解決

##解決方法

pyperclipモジュールのcopyメソッド と pyautoguiのhotkeyメソッドを利用することで解決しました。

pyautoguiでは日本語入力できないという問題がありましたが、下記の記事を参考にすることで解決しました。
https://sagantaf.hatenablog.com/entry/2017/10/18/231750

クリップボードにコピーした文章をキーボード操作で\nが現れるまでまとめて入力し、\nのところはShift+Enterを入力するプログラムとしました。

python3

1import pyautogui 2import pyperclip 3import time 4 5def copipe(string): 6 pyperclip.copy(string) 7 pyautogui.hotkey('command', 'v') 8 9 10def shift_enter(): 11 pyautogui.keyDown('shift') 12 pyautogui.press('enter') 13 pyautogui.keyUp('shift') 14 15text = pyperclip.paste() 16 17time.sleep(5) 18 19myclipbord = '' 20 21for i in text: 22 if i != '\n': 23 myclipbord += i 24 25 elif i == '\n': 26 copipe(myclipbord) 27 time.sleep(0.05) 28 myclipbord = '' 29 shift_enter() 30 time.sleep(0.05)

改善点などあればお教えください、、

投稿2021/02/20 15:03

編集2021/02/21 06:19
atrook

総合スコア18

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

etherbeg

2021/02/20 15:26

このプログラムだと、i が '\n' のときは copipe('\n') をしてから Shift+Enter をしている、つまり Enter を Shift+Enter に置き換えるのではなく、Enter の後に Shift+Enter を追加していますが、実際の環境では特に問題ないのでしょうか?
atrook

2021/02/20 15:33

コメントいただきありがとうございます。 自分の環境では希望の動作をしていたので、気づいていませんでした… copipe(i)の実行を'\n' でない時に限定するよう書き換えました。 ご指摘ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問