习题20:函数和文件

发布时间:2017-11-12 17:48:07编辑:Run阅读(5052)

    练习代码如下

    # coding: utf-8
    __author__ = 'www.py3study.com'
    from sys import argv
    script, input_file = argv
    def print_all(f):
       print(f.read())

    def rewind(f):
       f.seek(0)

    def print_a_line(line_count, f):
       print(line_count, f.readline())

    current_file = open(input_file)
    print("First let's print the whole file:\n")
    print_all(current_file)
    print("Now let's rewind, kind of like a tape.")
    rewind(current_file)
    print("Let's print three lines:")
    current_line = 1
    print_a_line(current_line, current_file)
    current_line = current_line + 1
    print_a_line(current_line, current_file)
    current_line = current_line + 1
    print_a_line(current_line, current_file)

    特别注意,每次运行print_a_line时,是怎么传递当前的行号信息的

    应该看到的结果

    图片.png


    常见问题

    print_all和其它函数里的f是什么?

    f只是一个变量名而已,不过在这里它指的是一个文件

    为什么文件里会有间隔空行?

    readline()函数返回的内容中包含文件本来就有的\n,而print在打印时又会添加一个\n

    为什么seek(0)没有把current_line设为0?

    首先seek()函数的处理对象是字节而非行,所以seek(0)只是转到文件的0字节

    +=是什么?

    这个是把=和+简写到一起了,x += y 的意思和 x = x +y 是一样的

    readline()是怎么知道每一行在哪里的?

    readline()里边的代码会扫描文件的每一个字节,直到找到一个\n为止,然后它停止读取文件,并且返回此前的文件内容,文件f会记录每次调用readline()后的读取位置,这样它就可以在下次被调用时读取接下来的一行了

关键字