代码如下:
点击查看代码
# -*-coding:utf-8- -*-
# 函数和文件
from sys import argv
script, input_file = argv
def print_all(f): # 定义 print_all 读 f
print f.read()
def rewind(f): # 定义 rewind / seek函数 / 位移文件指针
f.seek(0)
# 使用 open() 函数打开文件并读取文件中的内容时,总是会从文件的第一个字符(字节)开始读起。那么,有没有办法可以自定指定读取的起始位置呢?答案是肯定,这就需要移动文件指针的位置。
# seek() 函数用于将文件指针移动至指定位置,该函数的语法格式如下:
# file.seek(offset[, whence])
#
# 其中,各个参数的含义如下: file:表示文件对象; whence:作为可选参数,用于指定文件指针要放置的位置,该参数的参数值有 3 个选择:0 代表文件头(默认值)、1 代表当前位置、2 代表文件尾。 offset:表示相对于
# whence 位置文件指针的偏移量,正数表示向后偏移,负数表示向前偏移。例如,当whence == 0 &&offset == 3(即 seek(3,0) ),表示文件指针移动至距离文件开头处 3 个字符的位置;当whence
# == 1 &&offset == 5(即 seek(5,1) ),表示文件指针向后移动,移动至距离当前位置 5 个字符处。 注意,当 offset 值非 0 时,Python 要求文件必须要以二进制格式打开,否则会抛出
# io.UnsupportedOperation 错误。
def print_a_line(line_count, f): # 定义 print_a_line : 输出行数和该行内容
print line_count, f.readline()
# Python 文件 readline() 方法用于从文件读取整行,包括 "\n" 字符。如果指定了一个非负数的参数,则返回指定大小的字符数,包括 "\n" 字符。 fileObject.readline([size]) size
# -- 从文件中读取的字符数。 原理:当执行readline() 时,code会扫描文件中的每一个字节,直到找到一个 \n 位置,然后停止并读取此前的文件内容。并且fileobject 会记录每次调用readline(
# )后的对于读取位置,这样readline()下次被调用的时候就会读取下一行。
# 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)
fi = open(input_file)
新建 ex20 文件:
执行结果: