• 笨办法20函数和文件


    代码与课文有出入,详见注释:

     1 #coding:utf-8
     2 
     3 from sys import argv
     4 
     5 script, input_file = argv
     6 
     7 def print_all(f): # 打印从文件中读取的内容
     8     print f.read() 
     9 
    10 def rewind(f): # 将文件内部的指针重新指向开头
    11     f.seek(0) 
    12 
    13 def print_a_line(line_count, f): # 逐行打印
    14     print line_count, f.readline(), # 加入了“,”,见注释2
    15 
    16 current_file = open(input_file) 
    17 
    18 print "First let's print the whole file:
    "
    19 print_all(current_file)
    20 
    21 print "Now let's rewind, kind of like a tape."
    22 rewind(current_file)
    23 print "Let's print three lines:"
    24 
    25 current_line = 1
    26 print_a_line(current_line, current_file)
    27 
    28 rewind(current_file) # 多进行了一次操作,见注释1
    29 
    30 current_line = current_line + 1
    31 print_a_line(current_line, current_file)
    32 
    33 current_line += 1          # 见注释3
    34 print_a_line(current_line, current_file)

    输出结果: 
    这里写图片描述

    注:
    1. 在逐行打印操作,打印完第一行时,加入一个函数seek(),则返回文件第一行,重新从555开始打印
    2. 函数 readline() 返回一行以
    结尾的文件内容,所以在print最后加上一个逗号,每打印完一行内容就不会空行
    3. 关于+=:a = a + b可以缩写为a += b

    以下改变文件的内容,多加入两行: 
    这里写图片描述

    便于理解函数seek(),改变代码的顺序并删减不必要的内容,先输出文件的第一行,后输出整个文件内容,并且不使用seek():

     1 from sys import argv
     2 script, filename = argv
     3 
     4 def printall(f):
     5     print f.read()
     6 def readline(line, f):
     7     print line, f.readline()
     8 
     9 file = open(filename) 
    10 
    11 readline(1, file)
    12 printall(file)

    则输出如下结果:若不使用seek,则指针不回到文件开头,当输出全文件时,从已打印过的第一行之后,即第二行开始打印 
    这里写图片描述


    另外如果不将open(filename)赋值给file,直接使用open(filename)的话,printall的内容不受影响,代码如下:

     1 from sys import argv
     2 script, filename = argv
     3 
     4 def printall(f):
     5     print f.read()
     6 def readline(line, f):
     7     print line, f.readline()
     8 
     9 readline(1, open(filename))
    10 printall(open(filename))

    这里写图片描述

  • 相关阅读:
    C++学习之路: share_from_this<T>类的使用
    Linux学习: TCP粘包问题
    C++学习之路: 线程封装(基于对象编程)
    js数组方法
    React 性能优化
    HelloWorld
    设置表格边框的通用写法
    用于项目的SQL写法
    添加服务,用于定期执行某个程序或者应用程序(windows service)
    sql中除法,保留小数点位数
  • 原文地址:https://www.cnblogs.com/p36606jp/p/7648268.html
Copyright © 2020-2023  润新知