我发现自己经常使用Python的解释器来处理数据库,文件等 - 基本上是大量的半结构化数据的手动格式化.我没有像我希望的那样经常保存和清理有用的位.有没有办法将我的输入保存到shell中(数据库连接,变量赋值,少量循环和逻辑位) - 交互式会话的一些历史记录?如果我使用像script我得到太多stdout噪音的东西.我真的不需要腌制所有对象 - 但如果有一个解决方案可以做到这一点,那就没关系.理想情况下,我只剩下一个脚本,它以我交互式创建的脚本运行,我可以删除我不需要的位.有没有这样做的包,或DIY方法?
更新:我对这些包的质量和实用性感到非常惊讶.对于那些有类似痒的人:
我被转换了,这些真正填补了翻译和编辑之间的需要.
IPython%timeit magic命令可以很好地测量运行某些Python代码所需的时间.现在,我想在Python脚本中使用类似的东西.我知道timeit模块,但它有几个缺点,例如,如何自适应地选择运行次数?即默认代码
import timeit
t=timeit.Timer("code(f)", "from __main__ import code,f")
t.timeit()
Run Code Online (Sandbox Code Playgroud)
运行代码数百万次.%timeit IPyhton magic命令会自动执行此操作.我建议我可以使用MATLAB代码 http://www.mathworks.com/matlabcentral/fileexchange/18798
自动完成所有工作(并且还告诉函数的开销是否很大).
如何从Python脚本中调用%timeit magic(或者可能有更好的时序解决方案)?
为了简化Ipython的调试,我在脚本的开头添加了以下内容
from IPython.Debugger import Tracer
debug = Tracer()
Run Code Online (Sandbox Code Playgroud)
但是,如果我从命令行启动我的脚本
$ python myscript.py
Run Code Online (Sandbox Code Playgroud)
我收到了与Ipython相关的错误.有没有办法做到以下几点
if run_from_ipython():
from IPython.Debugger import Tracer
debug = Tracer()
Run Code Online (Sandbox Code Playgroud)
这样我只需要在需要时导入Tracer()函数.
是否可以保存IPython工作区(定义的函数,不同类型的变量等),以便以后加载它?
这与save.image()MATLAB或R中的功能类似.之前已经提出了类似的问题,例如:
但是,几年过去了,我想知道现在是否有一个好的解决方案.
我最近更频繁地使用 iPython (0.13.2),并且日志记录似乎是一个很棒的功能——如果我能让它正常工作的话。
目前,我可以通过 %magic 命令启动并指定日志文件ipython --logfile ~/path/fake.log,甚至可以在 iPython 会话的中间使用 %magic 命令%logstart ~/path/fake.log。
但是,我似乎无法从日志文件恢复会话,这似乎在一定程度上违背了目的。我已经搜索过 Google 和 SO,但是 SO 或文档中推荐的解决方案似乎都不能正常工作。
我努力了:
%logstart ~/path/fake.log append(源,结果:旧日志继续但未加载,上一个会话中的变量未定义)两个部分工作(因为它们尝试导入日志文件)但似乎不用于此目的是:
ipython -i ~/path/fake.log源,结果:如果会话导入和工作中没有错误。如果有任何错误,则不会导入并且变量仍然不可用。日志记录不会恢复。)。%run ~/path/fake.log没有来源,只是猜测和尝试。结果:与上面相同。如果没有错误并且变量为 GTG,则运行文件。如果有错误,则不起作用。不恢复日志记录。)iPython 0.13.2 中是否有任何方法可以有效地“从上次中断的地方开始”恢复会话?感谢您的任何帮助,您可以提供。
我是 Python 新手,我热切地从 MATLAB 迁移到 IPython,作为我在实验室进行数据分析的首选语言。
在 MATLAB 中,经过一段数据处理后,我会这样做
>>> save('myresults.mat','x','y','z');
Run Code Online (Sandbox Code Playgroud)
并将变量 x、y 和 z 的结果保存在名为“myresults.mat”的文件中。后来我只能简单地说:
>>> load('myresults');
Run Code Online (Sandbox Code Playgroud)
MATLAB 将加载 .mat 文件并将存储的变量值分配给当前工作区。
我最近了解到我可以使用 numpy 对 IPython 执行类似的操作,即:
import numpy as np
a = 2
b = np.sqrt(2)
np.savez('myresultsinpython',a,b)
Run Code Online (Sandbox Code Playgroud)
然后做类似的事情
npzfile = np.load('myresultsinpython')
Run Code Online (Sandbox Code Playgroud)
但是,我得到的是一个对象,我可以通过以下方式访问我的变量:
npzfile['arr_1']
Run Code Online (Sandbox Code Playgroud)
等等,但我丢失了有关变量原始名称的所有信息。我知道我可以通过以下方式保存文件
np.savez('myresultsinpython',a=a,b=b)
Run Code Online (Sandbox Code Playgroud)
但这并不是那么有用,因为我仍然需要做类似的事情:
npzfile['a']
Run Code Online (Sandbox Code Playgroud)
访问变量的值。
如何加载文件并在工作区中创建变量并根据文件中存储的值分配它们的值?
诸如np.load('myresults')能够做a+b并获得3.4142135623730949 (=2+sqrt(2))回报的事情。