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