美文网首页
Programming for Everybody (Pytho

Programming for Everybody (Pytho

作者: 木鼓 | 来源:发表于2014-11-21 16:42 被阅读795次

    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>

    相关文章

      网友评论

          本文标题:Programming for Everybody (Pytho

          本文链接:https://www.haomeiwen.com/subject/jeqwtttx.html