1、打开文件
得到文件句柄并赋值给一个变量
f=open("文件名","权限",encoding="utf-8")
2、通过句柄对文件进行操作
f.read([size]) #从文件读取指定的字节数,如果未指定或者负数则读取所有
f=open("sing","r",encoding="utf-8")
f_r=f.read()
print(f_r)
f.close()
f.readline([size]) #读取整行,包括\n字符
循环读取文件内容:
#打开文件
f=open("sing","r",encoding="utf-8")
print("文件名为:",f.name)
line=f.readline()
print("读取的第一行为:%s"%(line))
line=f.readline(5)
print ("读取的字符串为: %s" % (line))
#关闭文件
f.close()
运行结果:
文件名为: sing
读取的第一行为:塞纳河畔 左岸的咖啡
读取的字符串为: 我手一杯
f.readlines([sizeint])
#读取所有行并返回列表,若给定sizeint>0,返回总和大约为sizeint字节的行, 实际读取值可能比 sizeint 较大, 因为需要 填充缓冲区
# 打开文件
fo = open("sing", "r",encoding="utf-8")
print("文件名为: ", fo.name)
for line in fo.readlines(): # 依次读取每行
line = line.strip() # 去掉每行头尾空白
print("读取的数据为: %s" % (line))
# 关闭文件
fo.close()
3、关闭文件
f.close()
4、seek()方法
用于移动文件读取指针到指定位置
语法:
fileObject.seek(offset[,whence])
参数说明:
offset ->开始的偏移量,代表需要偏移的字节数
whence ->可选,默认值为 0。给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。
# 打开文件
fo = open("sing", "r+",encoding="utf-8")
print ("文件名为: ", fo.name)
line = fo.readline()
print ("读取的数据为: %s" % (line))
# 重新设置文件读取指针到开头
fo.seek(0, 0)
line = fo.readline()
print ("读取的数据为: %s" % (line))
# 关闭文件
fo.close()
5、tell()方法
返回文件的当前位置,即文件指针当前位置
语法:
fileObject.tell(offset[,whence])
# 打开文件
fo = open("sing","r+",encoding="utf-8")
print ("文件名为: ", fo.name)
line = fo.readline()
print ("读取的数据为: %s" % (line))
# 获取当前文件位置
pos = fo.tell()
print ("当前位置: %d" % (pos))
# 关闭文件
fo.close()
6、flush()方法
用来刷新缓冲区的,即将缓冲区中的数据立刻写入文件,同时清空缓冲区,不需要是被动的等待输出缓冲区写入。
使用场景:
一般情况下,文件关闭后会自动刷新缓冲区,但有时你需要在关闭前刷新它,这时就可以使用 flush() 方法。
语法:
fileObject.flush()
进度条例子:
import sys,time
for i in range(20):
sys.stdout.write("#")
sys.stdout.flush()
time.sleep(0.1)
7、write()
向文件写入指定的字符串。
在文件关闭前或缓冲区刷新前,字符串内容存在缓冲区中,这时你在文件中是看不到写入的内容的。
语法:
filieObject.write( [ str ] )
# 打开文件
fo = open("test.txt", "r+",encoding="utf-8")
print ("文件名: ", fo.name)
str = "5:www.oldboy.com"
# 在文件末尾写入一行
fo.seek(0, 2)
line = fo.write( str )
# 读取文件所有内容
fo.seek(0,0)
for index in range(5):
line = next(fo)
print ("文件行号 %d - %s" % (index, line))
# 关闭文件
fo.close()
8、writelines()
用于向文件中写入一序列的字符串
这一序列字符串可以由迭代对象产生的,如一个字符串列表,换行需要制定换行符\n
语法:
fileObject.writelines( [ str ] )
# 打开文件
fo = open("test.txt", "w",encoding="utf-8")
print ("文件名为: ", fo.name)
seq = ["菜鸟教程 1\n", "菜鸟教程 2"]
fo.writelines( seq )
# 关闭文件
fo.close()
文件操作——增删改查
r+ #读写
w+ #写读
a+ #追加读写
rb #二进制文件,比如打开视频文件
U #可以将\r \n \r\n自动转换成\n
with语句:
为了避免打开文件后忘记关闭,可以通过管理上下文
语法:
with open('log','r') as f
当with代码块执行完毕时,内部会自动关闭并释放文件资源