系列
- Python: 学习系列之一:Python能做什么
- Python: 学习系列之二:基础介绍(int/float/string/range/list/tuple/dict/set)
- Python: 学习系列之三:基础介绍二
- Python: 学习系列之四:有趣的经典数学问题
- Python: 学习系列之五:类、继承、多态、封装
- Python: 学习系列之六:对象的内置函数及类对象的特殊方法
- Python: 学习系列之七:模块、PIPY及Anaconda
- Python: 学习系列之八:异常的处理
- Python: 学习系列之九:文件读写
- Python: 学习系列之十:函数
打开文件
file = open('myfile.txt','r') # 以只读方式打开文件;如果文件不存在,会抛出FileNotFoundError异常
file = open('myfile.txx','w') #以只写方式打开文件;如果文件存在则清空文件;如果文件不存在,会创建文件
file = open('myfile.txt', 'a') # 以只写追回加的方式打开;如果文件存在,从文件末尾开始写;如果文件不存在,会创建文件
file = open('myfile.txt', 'x') # 以只写方式打开文件;如果文件存在则抛出FileExistsError异常;如果文件不存在,会创建文件
file = open('myfile.txt','r+') #[不能单使用]以读写方式打开,r+/w+/a+/x+都以读写方式打开
file = open('myfile.txt', 'rt') # [不能单使用]以文本方式打开,默认就是以文本方式打开,rt/xt/wt等
file = open('myfile.txt', 'rb') # [不能单使用]以二进制方式打开,默认就是以文本方式打开,rb/xb/wb+等
读文件
创建一个myfile.txt,文件内容为
1234567890
abcdefghij
xyz
"""
read([size]) size是字节数,,负数直接读到文件尾,指定的size不要超过默认的缓冲区的大小,否则可能并不能读取到指定的字节数,可以在io.DEFAULT_BUFFER_SIZE看到,为8192
"""
file = open('myfile.txt','r')
fileContent = file.read(3)
print(fileContent) # 123
fileContent = file.read()
print(fileContent) # 继续接着读,直到文件末尾 4567890\nabcdefghij\nxyz
file.close()
"""
readline([size]) size是字节数,负数直接读到文件尾
"""
file = open('myfile.txt','r')
fileContent = file.readline(3)
print(fileContent) # 123
fileContent = file.readline(10)
print(fileContent) # 继续接着读,最多读到行末尾 4567890\n
fileContent = file.readline(10)
print(fileContent) # 继续接着读下一行,abcdefghij
file.close()
"""
readlines([size]) size是字节数,负数直接读到文件尾
"""
file = open('myfile.txt','r')
fileContent = file.readlines(3)
print(fileContent) # ['1234567890\n'], 数组,它会读到当前size的行尾
fileContent = file.readlines(11)
print(fileContent) # ['abcdefghij\n', 'xyz'], 数组,它会读到当前size的行尾
file.close()
写文件
"""
write(text) 将指定文件写入到文件中,字符串会先写入缓存中,手动调用flush()或close()之后,
或者当写入的数据量大于等于缓存的容量时,写入到缓存中的字符串才会写入到文件中。
"""
file = open('myfile.txt', 'w') # 清空已存在的文件
size = file.write('1234567890')
print(size) # 10
file.flush()
file.close()
"""
writelines(seq) 将指定文件写入到文件中,字符串会先写入缓存中,手动调用flush()或close()之后,
或者当写入的数据量大于等于缓存的容量时,写入到缓存中的字符串才会写入到文件中。
"""
file = open('myfile.txt', 'w') # 清空已存在的文件
size = file.writelines(['1234567890\n','abcdefghij\n','xyz'])
print(size) # None
file.flush()
file.close()
使用With语句更优雅地关闭文件
"""
由于文件对象实现了特殊方法__enter__()和__exit__(),所以文件对象可以作为上下文管理器。
其中,特殊方法__enter__()返回打开的文件对象,特殊方法__exit__()中关闭打开的文件。
因此,可以使用with语句来实现文件的读写,省去手动关闭文件
"""
with open('myfile.txt','r') as file:
file.read()
file.write('something')
文件指针
"""
自由移动文件指针
seek(offset[,whence]), offset表示偏移量,whence表示相对偏移位置,有三种取值:
1. os.SEEK_SET:文件的起始位置,值为0,默认值
2. os.SEEK_CUR:文件的当前位置,值为1
3. os.SEEK_END:文件的结尾位置, 值为2
只有以二进制方式打开的文件才支持以上三种相对偏移位置
以文本方式打开的文件,只支持相对偏移位置中的文件的起始位置
"""
with open('myfile.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_CUR) #向前偏移
print(file.tell()) # 5