字符 | 含义 |
'r' | 以只读方式打开(默认) |
'w' | 以只写方式打开,删除原有文件内容(如果文件不存在,则创建该文件并以只写方式打开) |
'x' | 创建一个新文件, 并以写模式打开这个文件,如果文件存在则会产生"FileExistsError"错误 |
'a' | 以只写文件打开一个文件,如果有原文件则追加到文件末尾 |
'b' | 用二进制模式打开 |
't' | 文本文件模式打开 (默认) |
'+' | 为更新内容打开一个磁盘文件 (可读可写) |
缺省模式是 'rt'
'w+b' 可以实现二进制随机读写,当打开文件时,文件内容将被清零
'r+b' 以二进制读和更新模式打开文件,打开文件时不会清空文件内容
'r+' 以文本模式读和更新模式打开文件,打开文件时不会清空文件内容
python 文件常用方法:
方法 | 说明 |
F.read(size = -1) | 从一个文件流中最多读取size个字符 |
F.readline() | 读取一行数据, 如果到达文件尾则返回空行 |
F.readlines(max_chars=-1) | 返回每行字符串的列表,max_chars为最大字符(或字节)数 |
F.write(text) | 写一个字符串到文件流中,返回写入的字符数 |
F.writelines(lines) | 每行字符串的列表 |
F.flush() | 把写入文件对象的缓存内容写入到磁盘 |
F.close() | 关闭文件(关闭后文件不能再读写会发生ValueError错误) |
二进制文件操作方法:
F.tell() | 返回当前文件流的绝对位置 |
F.seek(offset, whence=0) | 改变数据流的位置,返回新的绝对位置 |
F.readable() | 判断这个文件是否可读,可读返回True,否则返回False |
F.writable() | 判断这个文件是否可写,可写返回True,否则返回False |
F.seekable() | 返回这个文件对象是否支持随机定位 |
F.truncate(pos = None) | 剪掉 自pos位置之后的数据,返回新的文件长度(字节为单位) |
# file = open("mynote.txt","rt")
with open("test.txt", 'rb') as file:
# file.write(meta['body'])
s = file.read()
print s
print s
文件定位
# -*- coding:utf-8 -*-
with open("test.txt", "rb") as fr:
position = fr.tell()
print "当前文件位置是:", position # 结果:当前文件位置是: 0
str = fr.read(10)
print "读取的字符串是:", str # 结果:l love qia
position = fr.tell()
print "当前文件位置是:", position # 结果:当前文件位置是: 10
# 把指针再次重新定位到文件开头。下面写法等同于:fr.seek(0, 0)
fr.seek(0)
position = fr.tell()
print "当前文件位置是:", position # 结果:当前文件位置是: 0
# 1.tell():返回当前文件流的绝对位置。获取文件指针的当前位置(值)。换句话说,下一次的读写会发生在文件开头这么多字节之后。返回当前文件指针在文件中的位置。
# 2.seek(offset,whence=0)
# offset偏移量:大于0的数代表向文件末尾方向移动offset位。小于0的数代表向文件头方向移动offset位。
# whence相对位置:
# 等于0:表示文件开头,代表从文件头部开始偏移。即将文件指针指向从文件的头部到 "偏移量"字节处。默认值为0。
# 等于1:表示当前位置,代表从当前位置开始偏移。即将文件指针指向从文件的当前位置,向后移动 "偏移量"字节。
# 等于2:表示文件结尾,代表从文件尾部开始偏移。即将文件指针指向从文件的尾部,向前移动 "偏移量"字节。
# 3.示例:f.seek(10,0)、f.seek(-10,2)、f.seek(5,1)
# 4.附加:f.tell()与f.seek()一般操作二进制文件
# 5.test.txt文件内容:l love qianqian more than yesterday
清空文件并替换内容
with open('aaa.txt', "r+") as fr:
read_data = fr.read()
# 把文件定位到头部,没有这句的话,文件是定位到数据最后,truncate也是从这里删除,不起作用。
fr.seek(0)
fr.truncate() # 清空文件内容
fr.write(read_data.replace('qianqian', 'baobei'))
# 修改前test.txt文件内容:l love qianqian more than yesterday
# 修改后test.txt文件内容:l love baobei more than yesterday
https://www.jb51.net/article/45956.htm