目录

  • 目录
  • 前言
  • 软件环境
  • Ipython的字符串处理
  • Ipython的魔力函数Magic
    • lsmagic Output所有魔力函数
    • 查看Magic的源码
    • env 显示系统环境变量
    • history 查看指令执行历史记录
    • pwd 显示当前目录路径
    • pycat 语法高亮显示一个Python程序文件
    • save 将历史指令筛选并保存到文件中
    • run 在IPython执行一个脚本
    • timeit 测试一条指令执行的时间
    • bookmark 记忆路径
    • file 创建并编辑一个文件
  • Python 和 shell 的结合
    • 在Shell中使用Python变量
    • 将Shell 的结果赋值给Python vairable

前言

上篇博文中记录了Setup Python环境和Iptyhon,以及Ipython的特性和部分基础功能。现在继续更深入的学习Ipython的特殊功能,以及Ipython的魔力函数—Magic

软件环境

  • 系统

    • Ubuntukylin 14.04
  • 软件
    • Python 2.7.6
    • Ipython 4.0.0

Ipython的字符串处理

Ipython内嵌grep()函数,可以实现类似awk、grep指令的功能
a). 获取要处理的文本内容

b). 对文本进行行过滤
contentsInfo.grep(“lineFilter”)

c). 行过滤后再进行的列过滤
contentsInfo.grep(“lineFilter”).fields(rangeArray)

也可以直接进行列过滤contentsInfo.fields(rangeArray)

e). 对进行过滤后的Out[ ]作选择操作

Ipython的魔力函数—Magic

Magic是Ipython内置的丰富的函数库,一般以%开头,支持查看函数的源代码,Magic是Ipython主要内容,为编程提供了很好的便捷性能。其中Magic有两种类型,分别是%:line magic和%%:call magic。前者针对处理一行代码,反之,后者处理多行代码。

%lsmagic — Output所有魔力函数

In [39]: %lsmagic
Out[39]:
Available line magics:
%alias  %alias_magic  %autocall  %autoindent  %automagic  %bookmark  %cat  %cd  %clear  %colors  %config  %cp  %cpaste  %debug  %dhist  %dirs  %doctest_mode  %ed  %edit  %env  %gui  %hist  %history  %install_default_config  %install_ext  %install_profiles  %killbgscripts  %ldir  %less  %lf  %lk  %ll  %load  %load_ext  %loadpy  %logoff  %logon  %logstart  %logstate  %logstop  %ls  %lsmagic  %lx  %macro  %magic  %man  %matplotlib  %mkdir  %more  %mv  %notebook  %page  %paste  %pastebin  %pdb  %pdef  %pdoc  %pfile  %pinfo  %pinfo2  %popd  %pprint  %precision  %profile  %prun  %psearch  %psource  %pushd  %pwd  %pycat  %pylab  %quickref  %recall  %rehashx  %reload_ext  %rep  %rerun  %reset  %reset_selective  %rm  %rmdir  %run  %save  %sc  %set_env  %store  %sx  %system  %tb  %time  %timeit  %unalias  %unload_ext  %who  %who_ls  %whos  %xdel  %xmodeAvailable cell magics:
%%!  %%HTML  %%SVG  %%bash  %%capture  %%debug  %%file  %%html  %%javascript  %%latex  %%perl  %%prun  %%pypy  %%python  %%python2  %%python3  %%ruby  %%script  %%sh  %%svg  %%sx  %%system  %%time  %%timeit  %%writefileAutomagic is ON, % prefix IS NOT needed for line magics.

可以看见Ipython拥有丰富的内置函数。下面着重介绍常用的几个。

查看Magic的源码

In [69]: %edit??

??:查看函数、指令、对象的详细信息,包括用法、函数的源代码等
?:查看函数、指令、对象、变量的更加详细使用方法、文档,但不包括函数的源代码

%env 显示系统环境变量

In [40]: %env

%history 查看指令执行历史记录

In [41]: %history -n

%pwd 显示当前目录路径

IpythonShell中的pwd是%pwd的链接,而%pwd是系统Bash中pwd的链接。Ipython中大部分可以直接使用的系统指令都是经过了这样的处理后才能使用。

In [42]: %pwd
Out[42]: u'/usr/local/src/pyScript'In [43]: pwd
Out[43]: u'/usr/local/src/pyScript'

%pycat 语法高亮显示一个Python程序文件

In [45]: %pycat pyFile.py

%save 将历史指令筛选并保存到文件中

常%save 结合 %history 、%edit 指令一起使用。
%save fileName commandsNnmber
先将历史记录保存到文件中

In [54]: %save testSave 1-3 14-15 24 27-30
File `testSave.py` exists. Overwrite (y/[N])?  y
The following commands were written to file `testSave.py`:
portInfo = get_ipython().getoutput(u'netstat -lpntu')
portInfo
portInfo.grep("tcp")
diskInfo = get_ipython().getoutput(u'df -TH')
diskInfo
diskInfo.grep("ext4",field=1).fields(0)
diskInfo.grep("ext4",field=1).fields(0,3,6)[0]
Out[1]
Out[26]
Out[26][4]

再编辑保存了历史指令的testSave文件,可以非常方便的将调试的指令写入到文件中,再作进一步的处理。

In [56]: %edit testSave.py# coding: utf-8portInfo = get_ipython().getoutput(u'netstat -lpntu')portInfoportInfo.grep("tcp")diskInfo = get_ipython().getoutput(u'df -TH')diskInfodiskInfo.grep("ext4",field=1).fields(0)diskInfo.grep("ext4",field=1).fields(0,3,6)[0]Out[1]Out[26]Out[26][4]

%run 在IPython执行一个脚本

在IPython中因无法使用python指令来执行一个.py的脚本,所以IPython也内嵌了一个%run函数来代替python command。其中run是%run的链接,所以有下面两种方式,而且还提供能多个选项来满足开发需求。

In [8]: run test.py
My Name is Jmilk!In [9]: %run test.py
My Name is Jmilk!

a). -t 输出程序执行的CPU timings, -Nx (x为数字)指定程序重复执行的次数。

In [10]: run -t test.py
My Name is Jmilk!IPython CPU timings (estimated):User   :       0.00 s.System :       0.00 s.
Wall time:       0.00 s.In [12]: run -t -N2 test.py
My Name is Jmilk!
My Name is Jmilk!IPython CPU timings (estimated):
Total runs performed: 2Times  :      Total      Per runUser   :       0.00 s,       0.00 s.System :       0.00 s,       0.00 s.
Wall time:       0.00 s.

b). -p 开启Python profiler(Python 程序性能调优)

In [18]: run -t -N2 -p test.py
My Name is Jmilk!

可以显示详细的程序运行时资源使用量的参数。

c). -d 进入ipdb控制台中,-bx(x为数字)指定行数打断点。是一个不错的程序调试平台。

In [19]: run -d test.py
Breakpoint 1 at /usr/local/src/pyScript/test.py:1
NOTE: Enter 'c' at the ipdb>  prompt to continue execution.
> /usr/local/src/pyScript/test.py(1)<module>()
1---> 1 print "My Name is Jmilk!"ipdb> 

上述%run函数的几个选项都非常值得深入学习,在以后会继续为大家介绍。

%timeit 测试一条指令执行的时间

%timeit 函数默认会重复执行10000次此条指令,并取出3个最佳的结果来计算平均值,从而得出一条指令执行所需要的时间。

In [23]: %timeit [i*i for i in range(1000)]
The slowest run took 5.67 times longer than the fastest. This could mean that an intermediate result is being cached
10000 loops, best of 3: 160 µs per loop

a). -n 指定重复执行的次数,默认为10000。-p 显示出详细的高精度时间。

In [31]: %timeit -n 100 [i*i for i in range(1000)]
100 loops, best of 3: 231 µs per loopIn [34]: %timeit -p 1000 [i*i for i in range(1000)]
1000 loops, best of 3: 162.34493255615234375 µs per loop

b). -r 指定取多少个最佳结果来计算平均值,默认为3个。

In [26]: %timeit -p 1000 -r 4 [i*i for i in range(1000)]
10000 loops, best of 4: 162.2743129730224609375 µs per loop

%bookmark 记忆路径

In [36]: %bookmark workspace /usr/local/src/pyScript/In [39]: cd workspace
(bookmark:workspace) -> /usr/local/src/pyScript/
/usr/local/src/pyScript

注意的是,使用%bookmark的定义的路径无法使用 !cd 来进入。既系统Shell不是别%bookmark定义的变量。

%file 创建并编辑一个文件

In [58]: %%file testFile.py
def myFuncation():name = 'Jmilk'print "My name is %s" % name
if __name__ == '__main__':myFuncation()....:
Overwriting testFile.pyIn [59]: run testFile.py
My name is Jmilk

Python 和 shell 的结合

在Shell中使用Python变量

可以在定义Python变量后,使用$符来结合Shell command和Python variable。需要注意的是,mkdir其实是%mkdir的链接,既本质上是IPython 的内嵌函数%mkdir 可以识别variable “folder” 。

In [62]: folder = 'testVariable'In [63]: mkdir $folderIn [65]: cd $folder
/usr/local/src/pyScript/testVariable
#反之,指令:!cd $folder 则无法执行

将Shell 的结果赋值给Python vairable。

vairable = !shellCommands

In [83]: import reIn [84]: portInfo = !netstat -lpntu | grep "tcp"In [86]: portInfo
Out[86]:
['tcp        0      0 127.0.0.1:11211         0.0.0.0:*               LISTEN      2259/memcached  ','tcp        0      0 127.0.1.1:53            0.0.0.0:*               LISTEN      1468/dnsmasq    ','tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1761/sshd       ','tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      5483/cupsd      ','tcp        0      0 0.0.0.0:15672           0.0.0.0:*               LISTEN      2428/beam.smp   ','tcp        0      0 0.0.0.0:55672           0.0.0.0:*               LISTEN      2428/beam.smp   ','tcp        0      0 0.0.0.0:3260            0.0.0.0:*               LISTEN      1823/tgtd       ','tcp        0      0 0.0.0.0:54531           0.0.0.0:*               LISTEN      2428/beam.smp   ','tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      1975/mysqld     ','tcp6       0      0 :::80                   :::*                    LISTEN      2845/apache2    ','tcp6       0      0 :::4369                 :::*                    LISTEN      2332/epmd       ','tcp6       0      0 :::22                   :::*                    LISTEN      1761/sshd       ','tcp6       0      0 ::1:631                 :::*                    LISTEN      5483/cupsd      ','tcp6       0      0 :::3260                 :::*                    LISTEN      1823/tgtd       ','tcp6       0      0 :::5672                 :::*                    LISTEN      2428/beam.smp   ']In [88]: for i in portInfo:print re.sub(r"0","J",i)....:
tcp        J      J 127.J.J.1:11211         J.J.J.J:*               LISTEN      2259/memcached
tcp        J      J 127.J.1.1:53            J.J.J.J:*               LISTEN      1468/dnsmasq
tcp        J      J J.J.J.J:22              J.J.J.J:*               LISTEN      1761/sshd
tcp        J      J 127.J.J.1:631           J.J.J.J:*               LISTEN      5483/cupsd
tcp        J      J J.J.J.J:15672           J.J.J.J:*               LISTEN      2428/beam.smp
tcp        J      J J.J.J.J:55672           J.J.J.J:*               LISTEN      2428/beam.smp
tcp        J      J J.J.J.J:326J            J.J.J.J:*               LISTEN      1823/tgtd
tcp        J      J J.J.J.J:54531           J.J.J.J:*               LISTEN      2428/beam.smp
tcp        J      J J.J.J.J:33J6            J.J.J.J:*               LISTEN      1975/mysqld
tcp6       J      J :::8J                   :::*                    LISTEN      2845/apache2
tcp6       J      J :::4369                 :::*                    LISTEN      2332/epmd
tcp6       J      J :::22                   :::*                    LISTEN      1761/sshd
tcp6       J      J ::1:631                 :::*                    LISTEN      5483/cupsd
tcp6       J      J :::326J                 :::*                    LISTEN      1823/tgtd
tcp6       J      J :::5672                 :::*                    LISTEN      2428/beam.smp   

将Shell commands的结果赋值给Pyhon variable后,可以将此List类型的变量再作后期的处理。其中re(regular expression) module在Python中实现正则表达式的功能。re.sub(substitute)则是实现正则表达式的替换功能。

到此IPython的基本介绍也完成了,IPython是一个非常有意思的东西,他所能实现的功能,总会给你惊喜。当然,,这也需要失时间去熟悉他。往后会结合Python的语法和代码实现来继续学习IPython。

Jmilk

IPython基础使用_Round2相关推荐

  1. Python数据分析学习笔记02:Python语言基础、IPython与Jupyter笔记本

    文章目录 一.Python解释器 二.IPython基础 1.运行IPython外壳 2.运行Jupyter笔记本 3.Tab补全功能

  2. 第02章 Python语法基础,IPython和Jupyter Notebooks

    第2章 Python语法基础,IPython和Jupyter Notebooks 当我在2011年和2012年写作本书的第一版时,可用的学习Python数据分析的资源很少.这部分上是一个鸡和蛋的问题: ...

  3. (数据分析)第02章 Python语法基础,IPython和Jupyter Notebooks.md

    第2章 Python语法基础,IPython和Jupyter Notebooks 当我在2011年和2012年写作本书的第一版时,可用的学习Python数据分析的资源很少.这部分上是一个鸡和蛋的问题: ...

  4. 第02章 Python语法基础,IPython和Jupyter Notebooks--Python for Data Analysis 2nd

    当我在2011年和2012年写作本书的第一版时,可用的学习Python数据分析的资源很少.这部分上是一个鸡和蛋的问题:我们现在使用的库,比如pandas.scikit-learn和statsmodel ...

  5. 《利用Python进行数据分析·第2版》第2章 Python语法基础,IPython和Jupyter Notebooks

    第 1 章 准备工作 第 2 章 Python 语法基础,IPython 和 Jupyter Notebooks 第 3 章 Python 的数据结构.函数和文件 第 4 章 NumPy 基础:数组和 ...

  6. 《利用Python进行数据分析·第2版》第2章 Python语法基础,IPython和Jupyter Notebooks...

    第1章 准备工作 第2章 Python语法基础,IPython和Jupyter Notebooks 第3章 Python的数据结构.函数和文件 第4章 NumPy基础:数组和矢量计算 第5章 pand ...

  7. python图形编程基础-Python从基础到入门系列教程

    本教程集合了Python基础&系统管理,从基础到入门,带你走进Python世界!对Python有兴趣的可以学习一下哦基础系列:1.课程简介2.Python下载和安装3.IDLE使用简介4.第1 ...

  8. ipython使用_IPython的介绍与使用

    1.IPython简介 ipython是一个python的交互式shell,比默认的python shell好用得多,支持变量自动补全,自动缩进,支持bash shell命令,内置了许多很有用的功能和 ...

  9. 【转】iPython入门技巧

    [转]http://www.cnblogs.com/cuiyubo/p/6823478.html 学习<利用python进行数据分析> 第三章 IPython:一种交互式计算和开发环境的笔 ...

最新文章

  1. uva 10401 Injured Queen Problem(dp)
  2. python是一门什么课程-为什么一定要让孩子学会一门编程语言?
  3. 简单的 密文认证方式
  4. c cuda 指定gpu_《CUDA C编程权威指南》——1.3 用GPU输出Hello World-阿里云开发者社区...
  5. python学习day17 递归函数
  6. Mapgis6.7 林相图自动注记 .
  7. android自定义曲线控件,Android自定义折线图
  8. 工程师如何优雅的拒绝不合理需求
  9. 十种QQ在线客服代码
  10. 【无机纳米材料科研制图——Visio 0305】开启开发人员模式绘制表面等离子共振SPR机理图
  11. guid分区怎么装win7_GUID分区是否可以装Win7?
  12. CentOS 下安装Mplayer播放器(转载)
  13. 全栈学习之CSS基础学习
  14. 罗马数字与阿拉伯数字的相互转换
  15. Linux debian安装DBeaver连接MySQL8、导入和导出数据库详细教程
  16. 俄亥俄大学计算机科学专业,美国计算机科学专业最新排名!
  17. 【JavaScript】从事件驱动到数据驱动
  18. 互联网应用 zzl复习版
  19. 支付宝618红包怎么领?怎么用?
  20. js产品360度旋转预览图片插件

热门文章

  1. js function如何传入参数未字符串_Python爬虫 JS 案例讲解:爬取漫画
  2. 使用脑电图慢皮层电位重建3D空间中的手,肘和肩的实际和想象的轨迹
  3. Elon Musk的OpenAI用VR训练机器人:解锁更多复杂动作!
  4. 小伙一本正经用石头打造CPU,号称99秒“解决”芯片危机
  5. 加州理工让无人机长出腿:走路飞行无缝切换,还能玩滑板、走钢丝|Sicence子刊...
  6. 屏显有啥硬科技可卷?让现在电视厂商这么拼
  7. 刚输一行代码就报5次假漏洞,npm让程序员们累觉不爱
  8. 谷歌重磅开源新技术:5行代码打造无限宽神经网络模型,帮助“打开ML黑匣子”...
  9. 微软日本每周只上四天班,销售额提升39.9%!网友:老板快来看啊
  10. RH124 章1 访问命令行 笔记