2.1 作为增强的Shell

IPython增强了Python控制台,同时也可以在此控制台下容易地访问系统Shell。当然,IPython Shell较之系统Shell功能有限得多(Unix风格的Shell),但在访问文件系统时还是很方便的,IPython的magic命令也大大提高了开发效率。

2.1.1 访问文件系统

下面的例子演示了访问文件系统的“日常”:下载文件、保存至本地、ls查看、解压缩、再查看。

import urllib2, zipfile
url = 'http://ipython.rossant.net/'
filename = 'facebook.zip'
downloaded = urllib2.urlopen(url + filename)
folder = 'social'
mkdir $folder
cd $folder
with open(filename, 'wb') as f:
    f.write(downloaded.read())

with zipfile.ZipFile(filename) as zip:
    zip.extractall('.')

ls
cd facebook/
ls

这里的mkdir和ls都是IPython中的别名(alias),通过%alias命令可查看当前的别名列表。有趣的是mkdir $folder一行同时访问了Python变量和系统Shell。如果你觉得接下来几天时间会频繁访问这些数据文件,那么最好给这个目录添加一个书签:

%bookmark fbdata
# access it later
cd fbdata

另一个方便之处是,在我们输入命令、代码时,IPython可以对目录和文件名自动补全

2.1.2 访问系统Shell

如果需要访问系统Shell命令,在Shell命令前添加!即可,同时命令的结果还可以返回给一个Python变量。

files = !ls -l -S | grep edges
files
['-rw-rw-rw-  1 anders.cui 0 600274 2015-11-18 00:36 1912.edges',
...
 '-rw-rw-rw-  1 anders.cui 0   2914 2015-11-18 00:36 3980.edges']

前面已看到,可以用$访问Python变量,还可以使用{}执行任意Pythonm表达式:

!head -n5 {files[0]}

如果发现某些命令频繁使用,我们可以为它创建别名以节省时间。

%alias largest ls -1sSh | grep %s
%store largest