import pandas as pd
sss = pd.read_clipboard(header=None, sep='\n')
で列名(フィールド名) が「0」の列に格納されたデータフレームsssを得られます。
行頭と行末の単独or連続した空白を消して取得したい場合は「sep=」の部分を書き換えて
sss = pd.read_clipboard(header=None, sep=r'\n')
とします。
windowsでは「sep='\r\n'」としなければ行けなそうですが、上記で行けました。
windows、linux、macでの改行コードの違いが気になる場合は「sep='\r\n|\n|\r'」とする必要が有りそうですが、上記で行けるかもしれません。この場合も行の最初と最後の単独or連続の空白は問答無用で消されます。
Webサイトによっては、pd.read_clipboard()使用時に、エクセルからコピーする際は文字化けするので、sep="\n" の他に encoding="shift_jis" を加えるべき、としている説明も有りますが、私のwindwos8.1、Excel2007環境では不要でした。pandasのバージョンアップによるものでしょうか?
クリップボードの内容取得ぐらい、Pandasに頼らなくともpythonのデフォルトで備えていてほしいものです。ちなみにデータ分析用のR言語では、下の記事の様にデフォルトでしかも一行でクリップボードの中身を取得できます。
統計用のR言語でクリップボードの中身を読み込む時に「 scan() 関数は 'a real' を期待したのに」とエラーが出る時の対処法 @情報学 @トラブル対処
下に続く・・・
スポンサードリンク
■■■クリップボードの中身を文字列として得る方法■■■
私の様に、改行ごと一気に正規表現で処理したい場合、次のコードで改行付き文字列 ssstr を得ます。2行目までは上記と同じです。
import pandas as pd
sss = pd.read_clipboard(header=None, sep='\n')
ssstr=""
for jjj in range(0, sss.shape[0]): #https://techacademy.jp/magazine/17697
ssstr += sss[0][jjj] + "\n"
■■■ 余談(意外な事実) ■■■
クリップボードの操作では「Pyperclip」も有名なのですが、なるべくインストールする回数は減らして悪意あるコードが紛れ込むリスクを減らそうと、今回はpandasを利用しました。
しかし・・・・・pandasがwindowsのクリップボードを操作する原理を知りたくてpandasのコードを解析したところ、意外な事実が発覚。
ファイルパスが「anaconda3\lib\site-packages\pandas\io\clipboard\__init__.py」のコードによると、pandasはどうやら内部でPyperclipを使用しているらしいです。結局 Pyperclip を使っているんかい。
そのPyperclipはコードを斜め読みする限り、 ctypes 関数などでwindows APIにアクセスしてクリップボードを操作しているらしいです。
なお、コードのコメントを見ると、以下のWebページを参考にしているらしいです。
http://msdn.com/ms649016
と言ってもアクセス後に強制的に下のURLに飛ばされます。
https://docs.microsoft.com/ja-jp/windows/win32/dataxchg/using-the-clipboard?redirectedfrom=MSDN
(コメントされる場合はコメントの最初にjjjjと入れて下さい。無い場合はスパムとみなされてしまいます。 English comments will be welcomed. If you have any comments, please write 'jjjj' at first of your comments OR spam filters will delete your comments.)
スポンサードリンク