习题 20: 函数和文件
ex20.py
#-*-coding:utf-8-*-
'''
此章学习看题目就知道,是将函数和文件的调用读写结合
从运行结果来看,首先是打印test.txt文件
之后分3次将文件的3行内容分别打印出来
也就是说,不出意外的话脚本调用了4次打印
'''
from sys import argv
script, input_file = argv
#定义一个名为print_all的函数
#参数为f(f可为任意字母数字加字符),打印出其的内容
def print_all(f):
print f.read()
#此处引申一个内建函数seek(offset,whence=0)
#Python文件的seek()方法将文件的当前位置设置为偏移量(offset)。
#offset:开始的偏移量,也就是代表需要移动偏移的字节数
#whence:给offset参数一个定义,表示要从哪个位置开始偏移;
#默认为0,0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。
#所以seek(0)就是转到开头?
def rewind(f):
f.seek(0)
#readline() 方法用于从文件读取整行,包括 "\n" 字符。
#如果指定了一个非负数的参数,则返回指定大小的字节数,包括 "\n" 字符。
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函数,打印打开的文件内容
print_all(current_file)
#打印文本
print "Now let's rewind, kind of like a tape."
#转至开头字节
rewind(current_file)
print"Let's print three lines:"
#此处就是readline()的用法了
#函数print_a_line定义了2个参数,第一个为行数,第二个则为读取整行
current_line = 1
print_a_line(current_line, current_file)
#重新定义了行数current_line,并进行打印
current_line = current_line + 1
print_a_line(current_line, current_file)
#由于current_line是一个变量,所以再定义后再进行计算则得到一个新值
current_line = current_line + 1
print_a_line(current_line, current_file)
#总结:在得知输出结果和内置函数的意义后看似能够明白其代码,但是只是通过结果去解析其过程,并不是理解!稍后进行实验。运行结果:
自我练习
ex20_1.py
#-*-coding:utf-8-*-
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()
def print_a_line_of_some(line_count,f):
print line_count, f.readline(6)
def print_a_line_of_some_test(f):
print f.readline(6)
current_file = open(input_file)
print "Start!!!\n"
print "print all:"
#正式开始,前面都是定义
#首先得打开文件
#如果rewind(current_file)在这则无法打印当前行数,让我很奇怪
print_all(current_file)
rewind(current_file)
print "The 3 lines!"
'''经过证明:
def print_a_line(line_count,f):
print line_count, f.readline()
line_count仅仅是数字,用于显示,并无法改变其具体显示第几行
readline每次仅仅读取一行
readline()括号中可加参数(数字),不加为读取一行,加了够则代表每次读取几个字符。
并且可以发现,readline()是依次读取的
'''
current_line = 1
print_a_line(1, current_file)
print_a_line(current_line*3, current_file)
print_a_line(3, current_file)
print "Now,6 character to be one line\n"
print_a_line_of_some(1, current_file)
print_a_line_of_some(current_line*3, current_file)
print_a_line_of_some_test(current_file)
运行结果:
这篇个人学习笔记详细记录了在《笨办法学Python》中关于习题20的函数和文件操作,包括使用`seek`和`readline`函数进行文件定位与读取的实践,通过编写ex20.py和ex20_1.py两个示例程序,展示了具体的应用场景和运行结果。
5128

被折叠的 条评论
为什么被折叠?



