打开文件
f=open('笔记2.txt','a+',encoding='utf-8')
文件打开的方式--如果打开文件没有指定默认读模式
r 读模式 文件不存在是报错,不可写
r+ 读写模式 文件不存在时报错
w 写模式 不可读,写的内容会覆盖之前的内容
w+ 写读模式 写的内容会覆盖之前的内容
a 追加不可读
a+ 追加读写模式 文件不存在是新建,可读可写,追加不覆盖
文件方法
f=open('笔记2.txt','w+',encoding='utf-8')#打开文件 with open('a.txt','w') as f,open('b.txt','r') as f2: #with,自动的关闭文件,也可以打开多个文件,逗号隔开即可 f.write('hhhhh') print(f.read())#读文件 print(f.readline())#只读取一行 print(f.readlines())#读取所有的内容,返回的是list,每行都是一个list元素 f.write(names)#write只接收str #注:f.writelines(names)接受字符串,会自动循环每一个字符,降低效率,用f.write()即可 f.writelines(names)#writelines传入的可迭代的对象,包括list,tuple,dict f.seek(0)#seek移动指针,但对读有效,对写无效,移动后写还是写在最后 f.truncate()#清空文件内容 print(f.tell())#查看当前文件指针的位置 f.flush()#立即将缓冲区的内容直接写在磁盘里,为了解决有时写了内容,文件中看不见的问题 f.close()#关闭文件 #图片、硬盘、视频等非文本格式的文件时,打开方式后边写‘b’,以二进制形式打开(rb,wb,ab) f=open('11.png','rb') print(f.read())
文件指针
#问题1 f=open('笔记2.txt','a+',encoding='utf-8') print(f.read()) #问题2 f=open('笔记2.txt','w+',encoding='utf-8') f.write('666'+' ') print(f.read()) #问题3 print(f.readline())#只读取一行 print(f.readlines())#读取所有的内容,返回的是list,每行都是一个一个list元素,上边read了第一行,再read指针就到了第二行,从第二行开始读 ''' 问题1:打开笔记2后read为空,因为以“a+”模式打开文件,默认指针指向最后,所以读不出内容,需要手动把指针指向文件开始 问题2:write后,read为空,因为write后指正指向文件末尾,需要重新打开文件或指定指针位置 问题3:读取一行后,再读,发现少了第一行,是因为指针到了第二行,从第二行开始读 '''
高效处理文件实例
#内存8G,文件7g,打开,把所有内容放在了内存里,一下内存就满了,电脑就卡死了 #解决,读一行处理一行,readline不可以,因为不知道多少次 fw=open('lsy.txt',encoding='utf-8') #直接循环文件对象的话,就是循环文件里的每一行 for f in fw: f =f.strip() nu=f.split(',') print(nu)
文件修改
#方法一:#缺点文件太大,会很慢 with open('a.txt','a+',encoding='utf-8') as f: f.seek(0) num=f.read() new_num=num.replace('1','6') f.seek(0) f.truncate()#清除不掉,因为指针已经到末尾了 f.write(new_num) f.flush() #方法二: import os with open('a.txt',encoding='utf-8') as f,open('a1.txt','w',encoding='utf-8') as f2: for line in f: new_line=line.replace('2','6') #问题 没有办法清空,因为指针已经到了第2行,解决再打开一个文件 f2.write(new_line) os.remove('a.txt') os.rename('a1.txt','a.txt')