I find myself frequently using Python's interpreter to work with databases, files, etc -- basically a lot of manual formatting of semi-structured data. I don't properly save and clean up the useful bits as often as I would like. Is there a way to save my input into the shell (db connections, variable assignments, little for loops and bits of logic) -- some history of the interactive session? If I use something like script I get too much stdout noise. I don't really need to pickle all the objects -- though if there is a solution that does that, it would be OK. Ideally I would just be left with a script that ran as the one I created interactively, and I could just delete the bits I didn't need. Is there a package that does this, or a DIY approach?
当前回答
我再提一个建议: 世爵
它有历史日志和变量资源管理器。如果你用过MatLab,你就会发现其中的相似之处。
其他回答
你可以用内置函数打开:我用它在我的所有 我需要存储一些历史的程序(包括计算器等) 例如:
#gk-test.py or anything else would do
try: # use the try loop only if you haven't created the history file outside program
username = open("history.txt").readline().strip("\n")
user_age = open("history.txt").readlines()[1].strip("\n")
except FileNotFoundError:
username = input("Enter Username: ")
user_age = input("Enter User's Age: ")
open("history.txt", "w").write(f"{username}\n{user_age}")
#Rest of the code is secret! try it your own!
我要感谢所有喜欢我评论的人!感谢您的阅读!
在IPython中,我首先使用
In [2]: %hist
查看我过去的代码。我选择我想要保存的块,然后使用%%文件魔法(%%writefile的缩写)将其粘贴到文件my_file.py中。
In [3]: %%file my_file.py
...: # paste code here
...:
...:
最后按了两次回车键。
使用选项-a: %%file -a my_file.py追加文件。
如果需要,我可以在底层命令行中使用感叹号列出、编辑文件等
In [5]: !ls -l my_file.py
In [6]: !vi my_file.py
我不得不努力寻找答案,我对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
这将把你所有的python语句保存在当前目录下的test.py文件中(你启动ipython的地方)。
有一种方法可以做到。将文件存储在~/.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
然后在shell中设置环境变量PYTHONSTARTUP(例如在~/.bashrc中):
export PYTHONSTARTUP=$HOME/.pystartup
你也可以添加这个来获得免费的自动补全:
readline.parse_and_bind('tab: complete')
请注意,这只适用于*nix系统。因为readline只在Unix平台上可用。
如果您喜欢使用交互式会话,IPython是非常有用的。例如,在您的用例中,有一个%save magic命令,您只需输入%save my_useful_session 10-20 23,将第10行到第20行和第23行保存到my_useful_session.py(为了帮助实现这一点,每一行都有它的数字前缀)。
此外,文件指出:
此函数对输入范围使用与%history相同的语法,然后将行保存到指定的文件名。
例如,这允许引用旧的会话,例如
%save current_session ~0/
%save previous_session ~1/
查看演示页面上的视频以快速了解功能。
推荐文章
- 证书验证失败:无法获得本地颁发者证书
- 当使用pip3安装包时,“Python中的ssl模块不可用”
- 无法切换Python与pyenv
- Python if not == vs if !=
- 如何从scikit-learn决策树中提取决策规则?
- 为什么在Mac OS X v10.9 (Mavericks)的终端中apt-get功能不起作用?
- 将旋转的xtick标签与各自的xtick对齐
- 为什么元组可以包含可变项?
- 如何合并字典的字典?
- 如何创建类属性?
- 不区分大小写的“in”
- 在Python中获取迭代器中的元素个数
- 解析日期字符串并更改格式
- 查看PS命令的全部输出
- 使用try和。Python中的if