一、文件操作
#打开文件: 1.路径(绝对路径、相对路径)。 # 2.编码方式。 # 3.操作方式(只读、只写、读写等)
二、打开方式
1. w 相关
# w w+ w+b 写相关 f=open('cimi.txt',mode="w",encoding='gbk') f.write('abcdefghigklmn') #只写方式就不能读 f.close() f=open('cimi.txt',"w+",encoding='gbk') #写读方式,清空原先的内容,然后写入 f.write('opq') #此时光标会到最后的位置,所以读不出来 content1=f.read() print(content1) #将光标移到首位 f.seek(0) content1=f.read() print(content1) f.close() #返回opq f=open('cimi.txt',mode="w+b") #凡是有b的就不需要加encoding参数了,而且后面会用到encode方法 f.write('rst'.encode('utf-8')) #同样光标移到最后,需要调整光标位置才可以读 f.seek(0) content2=f.read() print(content2) f.close() #返回b'rst' #弊端在于会清除原先的内容
2. r 相关
# r r+ r+b 读相关 f=open('cimi.txt',"r",encoding='utf=8') #只读方式打开,光标停在首位 content3=f.read() #读取首位之后全部内容 print(content3) #可以调整光标位置,读取部分内容 f.seek(1) content3=f.read() print(content3) f.seek(0) content3=f.readline() #readline可以有参数,限制读取行数,返回的是字符串 print(content3) f.seek(0) content3=f.readlines() #readlines很少有参数,返回的是一个列表,列表中元素是每一行字符组成的字符串 print(content3) f.close() #返回 # rst # st # rst # ['rst']
3. a 相关
# a a+ ab 追加写 f=open('cimi.txt',"a",encoding="gbk") #not readable,在后面写但是不可读,并且每次运行就在后面加写 f.write(' micisixili') f.write(' kalajahaga') f.close() f=open('cimi.txt',"a+",encoding="gbk") #光标开始位置是最后 f.seek(0) content4=f.read() print(content4) count=f.tell() print(count) f.write(' 男儿有胆气,仗剑走天涯') print(f.tell()) count=f.tell() f.seek(count-10) #打开方式是gbk,一个中文两个字节,如果打开方式是utf-8,就是一个中文三个字节 content4=f.read() print(content4) f.close() # 打印 # rst # micisixili # kalajahaga # 123 # 147 # 仗剑走天涯 f=open('cimi.txt',mode="a+b") f.write('cccc'.encode('gbk')) print('----') count=f.tell() f.seek(count-50) content5=f.read() print(content5) f.seek(count-50) listc=f.readlines() print(listc) f.close # ---- # b'micisixili kalajahaga xc4xd0xb6xf9xd3xd0xb5xa8xc6xf8xa3xacxd5xccxbdxa3xd7xdfxccxecxd1xc4cccc' # [b'micisixili ', b'kalajahaga ', b'xc4xd0xb6xf9xd3xd0xb5xa8xc6xf8xa3xacxd5xccxbdxa3xd7xdfxccxecxd1xc4cccc']
4.示例
f=open('cimi.txt',"r+",encoding='gbk') f.write('qm') #是从光标位置开始,向后覆盖 content6=f.read() print(content6) f.seek(0) for i in f: print(i,end='') print('-----') f.seek(0) f.truncate(10) content6=f.read() print(content6) f.close() # 打印 # t # micis # micisixili # kalajahaga # 男儿有胆气,仗剑走天涯cccc # qmt # micis # micisixili # kalajahaga # 男儿有胆气,仗剑走天涯cccc----- # qmt # micis
#方法 # f.write('内容') # f.seek(参数) 按照字节定光标 # f.tell() 获取当前文件指针的位置 # f.read(参数) 可以限制读的内容 # f.readline() 读一行,可以把光标调到第二行 # f.readlines() 形成列表,每一行的字符串作为一个元素 # f.truncate() 有返回值,参数可写,对源文件进行截取,其他的内容删掉可以配合seek使用
三、高级方式
with open('cimi.txt',"r+",encoding='gbk') as f: #读写方式,必须是已经存在的文件 f.write('cv') print(f.read()) #不需要关闭,自动关闭 #两个文件一起操作 with open('cimi.txt',"a+",encoding='gbk') as f1, open('test.txt',"r+",encoding='gbk') as f2: contentc=f2.read() print(contentc) print('------') f1.seek(0) contentz=f1.read() print(contentz) # # ll # micis # cill # ------ # cvll # micis
#文件操作注释 #文件操作中,最好不要又度又写,文件指针会乱。一定要注意。最好只r,w,a。 #编码方式最好是utf-8,标准规范的统一编码方式。 #readline不常用。视频文件基本都是一行一行,但是不可以一行一行读。应该先变成bytes,再按照字节读。 #readlines。 #for 循环就是最好的方法。 #with open 通过操作系统对文件进行修改。open函数里的参数,默认mode为r, encoding为unicode #所有windows文件都是gbk编码 f=open('cici.txt',"w") f.write("mo saf fds") f.close() #修改文件 with open('cici.txt',encoding='utf-8')as f,open('cici.bak',encoding='utf-8')as f2: for line in f : if 'saf' in line: line=line.replace('saf','salary') f2.write(line) #无论修改与否,都会在拷贝文件中写入Line的内容 #删除文件 import os os.remove('cici.txt') os.rename('cici.bak','cici.txt') #就是删除源文件之后,修改现在文件的名字