◎知识点
写文件
关闭文件
文件指针
◎脚本练习
▽ 写文件
"""
写文件之前,必须先打开文件。
可以调用内置函数open()并以只写方式、追加方式或读写方式打开文件。这样,返回的文件对象有两个
用于写文件的方法:
1. write(text)
用于将指定的字符串写入到文件中。调用后,会先将指定的字符串写入到缓存中,手动调用方法flush()
或close()之后,或者当写入的数据量大于等于缓存的容量时,缓存中的字符串才会被写入到文件中。
方法的返回值为写入的字符数,即指定的字符串的长度。
"""
"""
>>> file = open('myfile.txt', 'w')
>>> file.write('hello')
5
>>> file.write('python')
6
>>> file.flush()
>>> file.close()
>>> file = open('myfile.txt', 'a')
>>> file.write('hello')
5
>>> file.write('python')
6
>>> file.close()
"""
"""
2. writelines(seq)
用于将指定的字符串序列依次写入到文件中。调用后,会先将指定的字符串序列写入到缓存中,手动调用
方法flush()或close()之后,或者当写入的数据量大于等于缓存的容量时,缓存中的字符串序列才会被
写入到文件中。
"""
"""
>>> file = open('myfile.txt', 'w')
>>> file.writelines(['123\n', '456\n', '789'])
>>> file.close()
"""▽ 关闭文件
"""
文件在使用完毕后必须要关闭,这是因为文件对象会占用操作系统的资源,并且操作系统在某一时刻
所能打开的文件数量也是有限的。
读文件或写文件时都有可能发生异常,从而导致方法close()不会被调用。为了保证方法close()总能
被调用,可以把读文件或写文件的操作放在try语句块中,把方法close()的调用放在finally从句中,
伪代码如下:
打开文件
try:
读文件或写文件
finally:
调用方法close()关闭文件
由于文件对象实现了特殊方法__enter__()和__exit__(), 所以文件对象可以作为上下文管理器。
其中,特殊方法__enter__()返回打开的文件对象,特殊方法__exit__()中关闭打开的文件,因此,
上面的伪代码可以使用with语句来实现:
with 打开文件 as file:
读文件或写文件
"""
file = open('myfile.txt', 'w')
try:
file.write('hello')
finally:
file.close()
with open('myfile.txt', 'a') as file:
file.write('python')▽ 文件指针
"""
1、什么是文件指针?
任何文件对象都有一个文件指针,指向文件中的某个位置
读写文件时,是从文件指针的当前位置开始读写的,在读写的过程中,文件指针会随之往后移动
2、打开文件后文件指针的位置
以追加方式打开文件后,文件指针指向文件的结尾位置;以其它方式打开文件后,文件指针指向文件的
起始位置。
可以调用文件对象的方法tell(),返回文件指针的当前位置。
"""
with open('myfile.txt', 'r') as file:
print(file.tell()) # 0
with open('myfile.txt', 'r') as file:
print(file.tell()) # 10
"""
3、读写文件时文件指针的移动过程
"""
with open('myfile.txt', 'r') as file:
print(file.tell()) # 0
file.read(3)
print(file.tell()) # 3
file.read(4)
print(file.tell()) # 7
file.read()
print(file.tell()) # 10
with open('myfile.txt', 'a') as file:
print(file.tell()) # 10
file.write('hello')
print(file.tell()) # 15
with open('myfile.txt', 'w') as file:
print(file.tell()) # 0
file.write('hello')
print(file.tell()) # 5
"""
4、自由移动文件指针
可以调用文件对象的方法seek(offset[, whence]),将文件指针自由移动到参数指定的位置,其中:
参数offset表示偏移量,可以为负数;参数whence是可选的,表示相对偏移位置,有三种取值:
(1) os.SEEK_SET: 相对文件的起始位置,值为0,默认值
(2) os.SEEK_CUR: 相对文件的当前位置,值为1
(3) os.SEEK_END: 相对文件的结尾位置,值为2
以文本方式打开的文件,只支持相对文件的起始位置。
"""
import os
with open('myfile2.txt', 'rb') as file:
print(file.tell()) # 0
# file.seek(3, os.SEEK_SET)
# file.seek(3, 0)
file.seek(3)
print(file.tell()) # 3
file.seek(4, os.SEEK_CUR)
print(file.tell()) # 7
file.seek(-2, os.SEEK_END)
print(file.tell()) # 8
with open('myfile2.txt', 'r+') as file:
print(file.tell()) # 0
file.seek(3)
print(file.tell()) # 3
file.write('python')
print(file.tell()) # 9