python基础--文件操作

打开文件

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')



原文地址:https://www.cnblogs.com/alasijia/p/8110642.html