私はデータベースやファイルなどを扱うのにPythonのインタプリタを頻繁に使用しています。基本的には、半構造化データの手作業による書式設定がたくさんあります。私が望むほど有用な部分を適切に保存して整理することはしません。私の入力をシェルに保存する方法はありますか(db接続、変数代入、少しforループと少しのロジック) - 対話セッションの歴史。 script
のようなものを使用すると、標準出力ノイズが多すぎます。実際にすべてのオブジェクトをpickle化する必要はありません。それを解決するソリューションがあれば、問題ありません。理想的には、対話的に作成したスクリプトとして実行されているスクリプトをそのまま残しておき、不要な部分を削除するだけで済みます。これを行うパッケージ、またはDIYのアプローチはありますか?
更新:これらのパッケージの品質と有用性に本当に驚いています。かゆみが似ている人のために:
私は回心しています、これらはインタプリタとエディタの間の必要性を本当に満たします。
IPython あなたが対話型セッションを使うのが好きなら非常に役に立ちます。例えば、あなたのユースケースでは %save
マジックコマンド があります。入力行10から20と23を%save my_useful_session 10-20 23
に保存するためにmy_useful_session.py
を入力するだけです(これを助けるために、すべての行に接頭辞が付きます)。 。
さらに、文書には次のように記載されています。
この関数は、入力範囲に %history と同じ構文を使用してから、指定したファイル名に行を保存します。
これにより、たとえば、次のような古いセッションを参照できます。
%save current_session ~0/
%save previous_session ~1/
プレゼンテーションページのビデオ を見て、機能の概要を確認してください。
http://www.andrewhjon.es/save-interactive-python-session-history
import readline
readline.write_history_file('/home/ahj/history')
それには way があります。ファイルを~/.pystartup
...に保存します。
# Add auto-completion and a stored history file of commands to your Python
# interactive interpreter. Requires Python 2.0+, readline. Autocomplete is
# bound to the Esc key by default (you can change it - see readline docs).
#
# Store the file in ~/.pystartup, and set an environment variable to point
# to it: "export PYTHONSTARTUP=/home/user/.pystartup" in bash.
#
# Note that PYTHONSTARTUP does *not* expand "~", so you have to put in the
# full path to your home directory.
import atexit
import os
import readline
import rlcompleter
historyPath = os.path.expanduser("~/.pyhistory")
def save_history(historyPath=historyPath):
import readline
readline.write_history_file(historyPath)
if os.path.exists(historyPath):
readline.read_history_file(historyPath)
atexit.register(save_history)
del os, atexit, readline, rlcompleter, save_history, historyPath
そして、あなたのシェルで環境変数PYTHONSTARTUP
を設定します(例えば~/.bashrc
)
export PYTHONSTARTUP=$HOME/.pystartup
これを追加して無料でオートコンプリートを取得することもできます。
readline.parse_and_bind('tab: complete')
これは* nixシステムでのみ機能することに注意してください。 readlineはUnixプラットフォームでのみ利用可能です。
Ipython をインストールし、次のコマンドを実行してIpythonセッションを開いた後。
ipython
コマンドラインから、次のIpythonの「magic」コマンドを実行して、Ipythonセッション全体を自動的に記録します。
%logstart
これにより、一意の名前の.pyファイルが作成され、後で対話型のIpythonセッションとして使用するため、または選択したスクリプトで使用するためにセッションが保存されます。
また、 reinteract を使うと、Pythonセッションへのノートブックのようなインタフェースが得られます。
IPythonに加えて、似たようなユーティリティ bpython "入力したコードをファイルに保存する"機能があります。
私は答えを見つけるのに苦労しなければなりませんでした、私はiPython環境にとても不慣れでした。
これはうまくいくでしょう
あなたのiPythonセッションがこのように見えるなら
In [1] : import numpy as np
....
In [135]: counter=collections.Counter(mapusercluster[3])
In [136]: counter
Out[136]: Counter({2: 700, 0: 351, 1: 233})
1から135までの行を保存してから、同じipythonセッションでこのコマンドを使用します。
In [137]: %save test.py 1-135
これはあなたの現在のディレクトリ(あなたがipythonを始めた場所)のtest.pyファイルにあなたのすべてのpythonステートメントを保存するでしょう。
入力履歴(およびオプションで出力)を印刷および保存するための%historyマジックがあります。
現在のセッションをmy_history.py
という名前のファイルに保存するには
>>> %hist -f my_history.py
歴史IPythonはあなたが入力したコマンドとそれが生み出す結果の両方を保存します。上下の矢印キーを使用して以前のコマンドを簡単に確認したり、より洗練された方法で履歴にアクセスしたりできます。
過去の入力と出力を調べるために、%historyマジック関数を使うことができます。前のセッションからの入力履歴はデータベースに保存され、IPythonは出力履歴を保存するように設定できます。
%edit、%rerun、%recall、%macro、%save、%Pastebinなど、他のいくつかのマジック関数で入力履歴を使用できます。標準的なフォーマットを使って行を参照することができます。
%Pastebin 3 18-20 ~1/1-5
これにより、現在のセッションから3行目と18行目から20行目、前のセッションから1行目から5行目が取得されます。
履歴を見るDocstringとより多くの例のために。
また、IPythonでの変数の軽量永続性のために、 %store magic の機能を必ず調べてください。
変数、エイリアス、マクロをIPythonのデータベースに保存します。
d = {'a': 1, 'b': 2}
%store d # stores the variable
del d
%store -r d # Refresh the variable from IPython's database.
>>> d
{'a': 1, 'b': 2}
起動時に格納された変数を自動保存するには、ipython_config.pyでc.StoreMagic.autorestore = True
を指定します。
Linuxに関する限り、セッション全体を記録するためにscript
name__コマンドを使用できます。これはutil-linux
パッケージの一部なので、ほとんどのLinuxシステム上にあるはずです。 script -c python
を呼び出し、TypeScript
name__ファイルに保存されるエイリアスまたは関数を作成できます。例えば、これはそのようなファイルの1つの再版です。
$ cat TypeScript
Script started on Sat 14 May 2016 08:30:08 AM MDT
Python 2.7.6 (default, Jun 22 2015, 17:58:13)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> print 'Hello Pythonic World'
Hello Pythonic World
>>>
Script done on Sat 14 May 2016 08:30:42 AM MDT
ここでちょっと不利なのは、バックスペースを打ったときなどはいつでもscript
name__がすべてを記録し、改行も含むということです。そのため、col
name__を使用して出力をクリーンアップすることができます( nixおよびLinux Stackexchangeの記事 を参照)。
別の選択肢があります--- pyslice。 「wxpython 2.8 docsデモとツール」には、「pyslices」という名前のオープンソースプログラムがあります。
あなたはそれをエディタのように使うことができ、コンソールのように使うこともサポートしています。
もちろん、すべてのコードブロックと各ブロックの結果は自動的にtxtファイルに記録されます。
結果は対応するコードブロックのすぐ後ろに記録されます。とても便利。
入出力をXUbuntuに保存するため:
Terminal
をクリックし、ドロップダウンでsave contents
を探します。これで入力と出力が節約され、端末を開いたときに戻ることがわかりました。これはipython固有のものではなく、sshセッションや端末ウィンドウから実行される他のタスクで機能します。
私はLinux上のtmuxを介してPythonセッションを維持するための別の方法を提案したいと思います。あなたはtmuxを実行し、あなたが開いたセッションに自分をアタッチします(直接開いた後にアタッチされていない場合) pythonを実行して、あなたがしていることなら何でもしてください。その後、セッションから切断します。 tmuxセッションから切り離してもセッションは閉じられません。セッションは開いたままです。
このメソッドの長所:あなたは他のデバイスからこのセッションに接続することができます(あなたのPCをSSH接続できる場合)
このメソッドの短所:このメソッドは、実際にpythonインタプリタが存在するまで、開かれたpythonセッションで使用されるリソースを放棄しません。
一部のコメントでは、IPythonのすべての入力を一度に保存する方法を尋ねていました。 IPythonで%save magicを実行するには、プロンプトメッセージを避け、入力番号を指定しないようにするために、以下に示すようにすべてのコマンドをプログラムで保存することができます。 currentLine = len(入力)-1%save -f my_session 1- $ currentLine
-f
オプションはファイルの置き換えを強制するために使用され、len(IN)-1
はIPythonで現在の入力プロンプトを表示するので、セッション全体をプログラムで保存することができます。
bpythonを使用すると、すべてのコマンド履歴はデフォルトで~/.pythonhist
に保存されます。
後で再利用できるようにコマンドを保存するには、それらをpythonスクリプトファイルにコピーします。
$ cp ~/.pythonhist mycommands.py
それからそのファイルを編集してクリーンアップし、 Pythonパスの下に置く (グローバルまたは仮想環境のサイトパッケージ、現在のディレクトリ、*。pthなどの方法で言及)。
シェルにコマンドを含めるには、保存したファイルからコマンドをインポートするだけです。
>>> from mycommands import *
spacemacs
、およびpython-layer
に付属のipython
を使用している場合は、次のような定数の自動補完コマンドがバックグラウンドで機能するため、save magicによって不要な出力が多数作成されます。
len(all_suffixes)
';'.join(__PYTHON_EL_get_completions('''len'''))
';'.join(__PYTHON_EL_get_completions('''all_substa'''))
len(all_substantives_w_suffixes)
';'.join(__PYTHON_EL_get_completions('''len'''))
';'.join(__PYTHON_EL_get_completions('''all'''))
';'.join(__PYTHON_EL_get_completions('''all_'''))
';'.join(__PYTHON_EL_get_completions('''all_w'''))
';'.join(__PYTHON_EL_get_completions('''all_wo'''))
';'.join(__PYTHON_EL_get_completions('''all_wor'''))
';'.join(__PYTHON_EL_get_completions('''all_Word'''))
';'.join(__PYTHON_EL_get_completions('''all_words'''))
len(all_words_w_logograms)
len(all_verbs)
これを避けるためには、通常他のものと同じようにipythonバッファを保存するだけです:spc f s