打开和关闭文件
上面,我们已经学习了如何使用 print() 、input() 两个函数读写标准输入输出,接下来我们学习如何读写文件。
Python 内置了 file() 和 open() 两个函数用来打开一个文件进行读写
open() 函数
open() 函数会会打开一个文件,创建一个 file 对象,返回一个文件句柄,然后相关的方法就可以使用文件句柄来读写打开的文件了。
file_object = open(file_name [, access_mode][, buffering])
参数说明:
name -- 一个包含了你要访问的文件名称的字符串值
mode -- mode 决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表,这个参数是非强制的,默认文件访问模式为只读 (r)。
buffering -- 如果 buffering 的值被设为 0,就不会有缓冲,如果 buffering 的值取 1,访问文件时会缓冲,如果将 buffering 的值设为大于 1 的整数,就是缓冲区的大小,如果取负值,缓冲区的大小则为系统默认。
举例说明:文件打开模式
r -- 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式
rb -- 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式
r+ -- 打开一个文件用于读写。文件指针将会放在文件的开头
rb+ -- 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头
w -- 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件
File 对象的属性
当我们拥有了一个文件对象的句柄后,我们就可以得到有关该文件的各种信息,file 对象相关的所有属性:
file.closed 返回 True 如果文件已被关闭,否则返回 False
file.mode 返回被打开文件的访问模式
file.name 返回文件的名称
file.softspace 如果用 print 输出后,是否同时输出一个空格符,是则返回 True,否则返回 False 。默认为 False
举个栗子:
# 打开一个文件
fp = open("demo.txt", "wb")
print ("文件名: ", fp.name)
print ("是否已关闭 : ", fp.closed)
print ("访问模式 : ", fp.mode)
print ("末尾是否强制加空格 : ", fp.softspace)
运行以上 Python 代码,输出结果如下 以上实例输出结果:
文件名: demo.txt
是否已关闭 : False
访问模式 : wb
末尾是否强制加空格 : 0
close() 方法
File 对象的 close() 方法用于刷新缓冲区里任何还没写入的信息,并关闭该文件,这之后便不能再进行写入
当一个文件对象的引用被重新指定给另一个文件时,Python 会关闭之前的文件
读写完文件就用 close() 方法关闭文件是一个良好的编程习惯
语法
fileObject.close();
举个栗子:
# 打开一个文件
fp = open("demo.txt", "wb")
print ("文件名: ", fp.name)
# 关闭打开的文件
fp.close()
运行以上 Python 代码,输出结果如下
文件名: demo.txt
读写文件
读写文件
file 对象提供了一系列方法,可以让我们轻松简单对文件进行读写。其中最重要的两个方法就是: read() 和 write()
write() 方法
write() 方法用于将任何 Python 字符串写入一个打开的文件,Python 字符串可以是二进制数据,而不是仅仅是文字,需要注意的是:write() 方法不会在字符串的结尾添加换行符 ('\n')。
语法:
fileObject.write(string); #参数 string 就是要写入到已打开文件的内容
举个栗子:
# 打开一个文件
fp = open("demo.txt", "wb")
fp.write( "Hello\nworld");
# 关闭打开的文件
fp.close()
运行以上 Python 代码,打开 demo.txt 文件可以看到如下内容
Hello
world
read() 方法
read() 方法从一个打开的文件中读取一个字符串,读取的内容可以是文本内容,也可以是二进制输出,这取决于原本文件内容的存储格式。
语法:
fileObject.read([count]); #参数 count 用于设置要从已打开文件中读取的字节计数
read() 方法会从当前的文件指针 ( 刚打开的文件就是从头开始 ) 开始读入,如果没有传入count,它会尝试尽可能多地读取更多的内容,很可能是直到文件的末尾
举个栗子:
存在文件demo.txt,内容如下:
Hello
world
下面的代码从 demo.txt 文件中读取 5 个字节的内容
fp = open("demo.txt", "r+") # 打开一个文件
str = fp.read(5);
print ( "读取的字符串是 : ", str )
fp.close() # 关闭打开的文件
运行以上 Python 代码,输出结果如下
读取的字符串是 : Hello
文件定位 -- 文件游标
文件游标就是当前文件读到哪里或写到哪里了,文件游标类似于我们看到的光标
tell() 方法
tell() 方法用于显示当前文件对象的游标的位置,换句话说,下一次的读写会发生在文件开头这么多字节之后
fileObject.tell()
seek() 方法
seek() 方法用于改变当前文件的游标位置
seek ( offset [,from] )
参数 offset 变量用于设置要移动的字节数
参数 from 用于设置开始移动字节的参考位置
如果 from 被设为 0,这意味着将文件的开头作为移动字节的参考位置
如果设为 1,则使用当前的位置作为参考位置
如果它被设为 2,那么该文件的末尾将作为参考位置
假设存在文件 demo.txt 文件内容如下
Nice to meet you!
举个栗子:
# 打开一个文件
fp = open("demo.txt", "r+")
str = fp.read(10);
print ("读取的字符串是 : ", str)
# 查找当前位置
position = fp.tell();
print ("当前文件位置 : ", position)
# 把指针再次重新定位到文件开头
position = fp.seek(0, 0);
str = fp.read(10);
print ("重新读取字符串 : ", str)
# 关闭打开的文件File
fp.close()
运行以上 Pyhton 代码,输出结果如下:
读取的字符串是 : Nice to me
当前文件位置 : 10
重新读取字符串 : Nice to me
网友评论