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