您的位置:首页 > 编程语言 > Python开发

python 笔记 函数和文件(seek和readline)《笨办法学Python》习题20 ——12.28

2017-12-28 13:33 423 查看
习题 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)

运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息