对文件的操作分三步:
1、打开文件获取文件的句柄,句柄就理解为这个文件
2、通过文件句柄操作文件
3、关闭文件。
现有以下文件a.txt:
登鹳雀楼
唐代:王之涣
白日依山尽,黄河入海流。
一、文件基本操作
f = open('a.txt','a+',encoding='utf-8')#打开一个文件
f.seek(0)#seek移动指针到文件开头的时候,只对读好使,对写不好使
print(f.read())#读取文件里面的全部内容
f.write('\n'+'欲穷千里目,更上一层楼。 ')#写入文件
# f.truncate()#清空文件内容
print(f.tell())#查看当前文件指针的位置
print(f.readline())#只读取一行的内容
print(f.readlines())#读取文件里面所有的内容,把文件里面每一行的内容放到一个list里面
f.close()#关闭文件
注:文件打开有3种方式
读 r (如果打开的文件的时候没有指定模式,那么默认是读)
读写模式 r+(只要沾上r,文件不存在的时候,打开都会报错)
写 w
写读模式 w+(只要沾上w,他就会把文件内容清空)
追加 a
追加读写a+
f = open('a.txt','a+',encoding='utf-8')
# names = {'a:1'}
# s='haha,123456'
# f.write(names)
# f.writelines(names) #写入可迭代的数据,效率不高
二、文件的高效处理
用上面的read()和readlines()方法操作文件的话,会先把文件所有内容读到内存中,这样的话,内存数据一多,非常卡,高效的操作,就是读一行操作一行,读过的内容就从内存中释放了
f = open('file.txt')
for line in f:
print(line)
#这样的话,line就是每行文件的内容,读完一行的话,就会释放一行的内存
三、文件的修改
''修改文件 一 '''
with open('a.txt','a+',encoding='utf-8') as f:
f.seek(0)
all =f.read()
new_all =all.replace('二','一')
f.seek(0)
f.truncate() #删除原文件内容
f.write(new_all)
f.flush()
'''修改文件 二'''
import os
with open('a.txt','a+',encoding='utf-8') as f,open('c.txt','w',encoding='utf-8') as f2:
f.seek(0)
for line in f:
new_line = line.replace('一','二')
f2.write(new_line)
os.remove('a.txt')#删除原文件
os.rename('c.txt','a.txt')#更改修改文件名称
四、其他
with open('a.txt','w') as gy,open('b.txt','w') as gy2: #打开多个文件且自动关闭
gy.write('hhh')
gy2.write('hahah')
f = open('1.png','rb')# 加b是以二进制方式打开,图片、音频等
print(f.read())
import requests
url ='https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1515304507894&di=070363110e7a4fdb43819f439ab4d168
&imgtype=0&src=http%3A%2F%2Fg.hiphotos.baidu.com%2Fimage%2Fpic%2Fitem%2F5fdf8db1cb134954a7ff35815c4e9258d0094a76.jpg'
img = requests.get(url).content
f = open('c.jpg','wb')
f.write(img)
import time
f = open('a.txt','w')
f.write('adada')
f.flush()#立即把缓冲区里面的内容写到文件中