前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >习题20:函数和文件

习题20:函数和文件

作者头像
py3study
发布2018-08-02 14:38:29
1880
发布2018-08-02 14:38:29
举报
文章被收录于专栏:python3python3

练习代码如下

代码语言:javascript
复制
# 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
图片.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()后的读取位置,这样它就可以在下次被调用时读取接下来的一行了

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-11-12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档