文件读写和修改
1.打开文件的三种模式
1)读模式(r:只能读不能写,打开不存在文件会报错 )
f=open(r'C:\Users\Administrator\Desktop\课前须知.txt',encoding='utf-8') result=f.read() print(result) f.close()
2)写模式 (w:只能写不能读 。会把原有内容覆盖掉,文件不存在会创建)
f=open(r'C:\Users\Administrator\Desktop\课前须知.txt','w',encoding='utf-8') f.write('abc') f.close()
3)追加模式(a: 只能写不能读 。不会清空原来内容,是在内容后面追加内容,文件不存在会创建)
f=open(r'C:\Users\Administrator\Desktop\课前须知.txt','a',encoding='utf-8') f.write('abc')
f.close()
2.新三种模式
r+ 只要和r有关,打开不存在文件都会报错 。
w+ 只有和w有关,都会清空原来的文件。
a+ 文件指针 seek()解决
# f = open(r'test.txt','a+',encoding='utf-8') # f.seek(0) #r就是原字符 # print(f.read())#读取文件里面所有的内容 # print('8====',f.readline())#读取一行的内容 # print('readlines',f.readlines())# f.read() # f.seek(0)#移动文件指针 # print(f.read()) # f.close() # f = open('test.txt','r+',encoding='utf-8') # f.seek(0) # f.write('111') # f.close() #文件指针 l = ['a\n','b\n','c\n','e\n','g\n'] f = open('nhy.txt','w',encoding='utf-8') # for i in l: # f.write(i+'\n') f.writelines(l) #传一个list的话,他会自动帮你循环,把list里面每一个 #元素写到文件里面 f.close() # f.write('sd')
3.练习
#监控服务器日志,找出每分钟访问超过100次的ip地址。 #1、每分钟读取一次文件,获取文件内容 #2、从文件内容里面找到ip地址 #3、判断每个ip出现的次数,如果超过100次,就找出来 import time point = 0 while True: ips = {}#存放所有的ip地址 f = open('access.log',encoding='utf-8') f.seek(point) for line in f: if line.strip()!='':#判断是否不为空行 ip = line.split()[0] if ip not in ips: ips.setdefault(ip,1) else: ips[ip]+=1 # ips[ip]=ips[ip] + 1 point = f.tell()#记录文件指针的位置 for k,v in ips.items(): if v>=100: print('有问题的ip地址是%s'%k) f.close() time.sleep(60)
4.文件修改
#1、简单直接粗暴的方式 #1、读取内容 #2、替换 #3、清除原来文件的内容 #4、把新的内容写进去 # f = open('nhy.txt','a+',encoding='utf-8') # f.seek(0) # result = f.read() # content = result.replace('xiaolan','dalan')#替换 # f.seek(0) # f.truncate()#清空文件内容 # f.write(content) # f.close() # f2 = open('nhy.txt','w') # f2.write(content) #第二种 #1、逐行处理 #1、打开a文件,在打开一个b文件 #2、从a文件读一行,修改,修改之后写到b文件里 #3、删除a文件,把b文件的名字改成a文件 f = open('nhy.txt',encoding='utf-8') f2 = open('nhy2.txt','w',encoding='utf-8') for line in f: result = line.upper() f2.write(result) f.close() f2.close() import os os.remove('nhy.txt') os.rename('nhy2.txt','nhy.txt')
5.不需要写关闭的文件打开方式
with open('test.txt') as f,open('nhy.txt') as f2: f.read() #这种写法不需要关闭,不需要f.close()