Programming for Everybody (Pytho
Coursera上面一门为零基础学友提供的Python入门课程。貌似已经是我坚持第二久的课了XXD~
0. 之前的教学回顾
之前我们所学的Python语言都是集中于CPU和主存储器之间的(也就是下图黄圈内的)一些工作,目前为止我们掌握的所有的东西都是为了接下来“跳出黄圈圈,走向粉圈圈(辅助存储器)”做准备,小伙伴们准备好了嘛?(忘记这些圈圈的可以自觉复习第一周的功课~)
Week 7 课件截图
1.0 本周学习内容——文件 File
这里说的是储存于辅助存储器的文本文件(text file),是一系列的信息。
1.1 打开文件:open()
open函数是Python既有的嵌入式函数。
注:使用open命令之后,并不意味着你已经读取文件信息,而是得到一个“文件句柄(File Handle)”,说明你已经与文件建立了联系,可以读取它的信息(也可以想象成你念了一道open的咒令,新世界的大门向你打开,但真的只是“打开”而已;要得到宝藏,你还得自己走进去动手拿呀~)。
handle = open(filename, mode) * :括号内,逗号前面表示文件名,后面表示你希望打开文件的模式(即采取什么动作)。
例如:open('mbox.txt', 'r')* —— 其中,mbox.txt是你要打开的文件名,r说明你要读取它。
当然了,如果你要打开的文件不存在,就会报错。
1.2 换行:/n
文本文件可以看成是有一系列“行”组成的。在Python里面,我们在需要换行的字符之间加入“/n”表示换行。
注:每个换行(即每个“/n”)都占一个字符,和每个空格一样。
2.读取文件
用for循环(确定循环)。
2.1 数一数文件一共有几行?
<pre><code>fhand = open('mbox.txt')
count = 0
for line in fhand:
count = count + 1
print 'Line Count:', count</code></pre>
如果文件不是很大,我们还是可以让计算机为我们读取整个文件的:
<pre><code>fhand = open('mbox-short.txt')
inp = fhand.read()
print len(inp)
print inp[:20]</code></pre>
2.2 文档内搜索
通常可以有3种方式,随你喜欢。
2.2.1 startswith
<pre><code>fhand = open('mbox-short.txt')
for line in fhand:
line = line.rstrip()
if line.startswith('From'):
print line</code></pre>
注:为什么一定要用rstrip ?
每个“print"指令后面都会自带换行/n,每一行(每条line)后面本身也自带换行。因此如果没有rstrip()把每行后面的“/n"去掉,你就会看到写一行空一行的局面……
2.2.2 continue
如果整个程序非常复杂,那就比较适合用这个函数。
<pre><code>fhand = open('mbox-short.txt')
for line in fhand:
line = line.rstrip()
#Skip 'uninteresting lines'
if not line.startswith('From'):
continue
#Process our 'interesting' line
print line</code></pre>
注:这是一个逆向搜索("if not"),但是2.2.1和2.2.2的结果是一样的。所谓逆向搜索的思路基本上就是“如果某一行不是你想找的,那就略过(skip)这行,搜索下一行”。
这样的好处是:一旦某一行没有你要找的内容,那么Python就会回到循环的起点,而不用再理会其后复杂的程序。
2.2.3 in
之前两种方式都是对句首加以限制条件(startswith)来搜索,如果要找文中任意一个角落呢?那就要用上我们教师最喜欢的(之一XXD)"in".
<pre><code>fhand = open('mbox-short.txt')
for line in fhand:
line = line.rstrip()
if not l‘@uct.ac.za' in line:
continue
print line</code></pre>
2.3 给我一个文件名,剩下的就交给我吧: raw_input
你不用每次要处理文件的时候都写个Python,好辛苦。你要做的就是稍稍改进一下你的代码,比如:
<pre><code>fname =ray_input('Enter the file name:')
fhand = open(fname)</code></pre>
2.3.1 还有什么可以改善的:try/except
谨防有些熊孩子什么文件名都打得下手,“打”得不好(比如根本就不是个文件名啊什么的)系统狂报错怪我们写得不行,我们可以用个try/except结构来先检验一下~
<pre><code>fname =ray_input('Enter the file name:')
try:
fhand = open(fname)
except:
print 'File cannot be opened:', fname
exit()
count = 0
for line in fhand:
if line.startswith('Subject')
count = count + 1
print 'There were', count, 'subject lines in', fname</code></pre>