练习15--阅读文件
一 相关知识
1 打开文件:open()函数--http://c.biancheng.net/view/2544.html
- 功能:用于创建或打开指定文件
- 语法格式:file = open(file_name [, mode='r' [ , buffering=-1 [ , encoding = None ]]]
- 此格式中,用 [] 括起来的部分为可选参数,即可以使用也可以省略。其中,各个参数所代表的含义如下:
- file:表示要创建的文件对象。
- file_name:要创建或打开文件的文件名称,该名称要用引号(单引号或双引号都可以)括起来。需要注意的是,如果要打开的文件和当前执行的代码文件位于同一目录,则直接写文件名即可;否则,此参数需要指定打开文件所在的完整路径。
- mode:可选参数,用于指定文件的打开模式。如果不写,则默认以只读(r)模式打开文件。
- buffing:可选参数,用于指定对文件做读写操作时,是否使用缓冲区。
- encoding:手动设定打开文件时所使用的编码格式,不同平台的 ecoding 参数值也不同,以 Windows 为例,其默认为 cp936(实际上就是 GBK 编码)。
- open()文件对象常用的属性(成功打开文件之后,可以调用文件对象本身拥有的属性获取当前文件的部分信息)
- file.name:返回文件的名称;
- file.mode:返回打开文件时,采用的文件打开模式;
- file.encoding:返回打开文件时使用的编码格式;
- file.closed:判断文件是否己经关闭。
2 读取文件:read()函数
- python提供了如下 3 种函数,它们都可以帮我们实现读取文件中数据的操作:
- read() 函数:逐个字节或者字符读取文件中的内容;http://c.biancheng.net/view/2545.html
- readline() 函数:逐行读取文件中的内容;http://c.biancheng.net/view/2545.html
- readlines() 函数:一次性读取文件中多行内容。
- Python read()函数
- 功能:
- 对于借助 open() 函数,并以可读模式(包括 r、r+、rb、rb+)打开的文件,可以调用 read() 函数逐个字节(或者逐个字符)读取文件中的内容。
- 如果文件是以文本模式(非二进制模式)打开的,则 read() 函数会逐个字符进行读取;反之,如果文件以二进制模式打开,则 read() 函数会逐个字节进行读取。
- 语法格式:file.read([size])
- 其中,file 表示已打开的文件对象;size 作为一个可选参数,用于指定一次最多可读取的字符(字节)个数,如果省略,则默认一次性读取所有内容。
- 注意:
- 想使用 read() 函数成功读取文件内容,除了严格遵守 read() 的语法外,其还要求 open() 函数必须以可读默认(包括 r、r+、rb、rb+)打开文件。
- 如果把open()的打开模式改为 w,程序会抛出
io.UnsupportedOperation
异常,提示文件没有读取权限
- 功能:
3 关闭文件:close()函数
- 功能:专门用来关闭已打开文件
- 语法格式:file.close()
- 其中,file 表示已打开的文件对象。
- 注意:使用 open() 函数打开的文件,在操作完成之后,一定要调用 close() 函数将其关闭,否则程序的运行可能出现问题。
4 常见问题
- txt = open(filename)会返回文件的内容吗?
-
- 不会。它其实是创建了一个叫做“文件对象”(fileobject)的东西。你可以把它想象成曾经的 DVD 播放器,你可以在里面移动然后“读取”它们。但是 DVD 播放器不是 DVD 本身,就像文件对象也不是文件本身一样。
- 为什么打开文件两次不会收到报错?
- Python 不会限制你只能打开一次文件,事实上有时候确实需要打开多次。
二 代码
1 程序代码
# 从sys包里面获取argv函数 from sys import argv # 用argv获取一个文件名 script,filename = argv # 打开一个文件 txt = open(filename) print(f"Here's your file {filename}") # 读取文件的内容, txt.(read) 是说: txt ,执行不带参数的 read 命令 print(txt.read()) print("Type the filename again:") # 再次输入想要读取的文本名称 file_again = input("> ") # 打开文件 txt_again = open(file_again) # 打印文本内容 print(txt_again.read()) txt.close() txt_again.close()
2 执行结果
PS E:\3_work\4_python\2_code\02_LearnPythonTheHardWay> python ex15.py ex15_sample.txt Here's your file ex15_sample.txt This is stuff I typed into a file. It is really cool stuff. Lots and lots of fun to have in here. Type the filename again: > ex15_sample.txt This is stuff I typed into a file. It is really cool stuff. Lots and lots of fun to have in here.