文件操作
程序员文章站
2024-03-25 14:05:04
...
Python读写文件模式
1、r 打开只读文件,该文件必须存在。
2、r+ 打开可读写的文件,该文件必须存在。
3、w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
4、w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
5、a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。
6、a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。
1、r 打开只读文件,该文件必须存在。
#已创建a.txt文件
f.read() # 读所有东西,返回字符串
f = open('a.txt','r',encoding='utf-8')
result1 = f.read()# 读所有东西,返回字符串
print(result1)
输出结果:
C:\Users\m\AppData\Local\Programs\Python\Python38\python.exe D:/Python/project/geng_juans_homework/day3/操作文件.py
大理
丽江
Process finished with exit code 0
f.readlines() #读所有东西,返回列表
f = open('a.txt','r',encoding='utf-8')
result2 = f.readlines()#读所有东西,返回列表
print(result2)
输出结果:
C:\Users\m\AppData\Local\Programs\Python\Python38\python.exe D:/Python/project/geng_juans_homework/day3/操作文件.py
['大理\n', '丽江']
Process finished with exit code 0
f.readline() #只读一行
f = open('a.txt','r',encoding='utf-8')
result3 = f.readline()#只读一行
print(result3)
print(f.readline())#再读一行
输出结果:
C:\Users\m\AppData\Local\Programs\Python\Python38\python.exe D:/Python/project/geng_juans_homework/day3/操作文件.py
大理
丽江
Process finished with exit code 0
2、r+ 打开可读写的文件,该文件必须存在。
3、w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
f = open('a.txt','w',encoding='utf-8')
f.write('再见')#只能写字符串
f.close()#写完文件后必须要关闭文件
输出结果:
#换行输入
f = open('a.txt','w',encoding='utf-8')
addr = ['大理\n','丽江']#可换行输写入文件
f.writelines(addr)#有循环功能,可以写入list,只能写字符串
f.close()
输出结果:
f = open('a.txt','w',encoding='utf-8')
addr = ['大理\n','丽江']#可换行输写入文件
f.writelines(addr)#有循环功能,可以写入list,只能写字符串
f.close()
输出结果:
4、w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
5、a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。
6、a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。
在文件最前面添加
f = open('a.txt','a+',encoding='utf-8')
f.write('\n香格里拉')#在文件末尾写入'香格里拉'
f.seek(0)#文件指针一道最前面
result = f.read()#读出所有内容
new_result = '龙龙\n'+result#把'龙龙'拼接在文件最前面,此时字符串名为new_result
f.close()
f2 = open('a.txt','w',encoding='utf-8')#再次打开并清空文件a.txt
read_new_result = f2.write(new_result)#读在开头写入'龙龙'后的文件,new_result结果
f.close()
输出结果:
清空文件
f = open('a.txt','a+',encoding='utf-8')
f.write('\n香格里拉')#在文件末尾写入'香格里拉'
f.seek(0)#文件指针一道最前面
result = f.read()#读出所有内容,此时文件指针在最前面
new_result = '龙龙\n'+result#把'龙龙'拼接在文件最前面,此时字符串名为new_result
f.seek(0)#文件指针挪到最前面,才能清空文件所有内容
f.truncate()
f.write(new_result)#读在开头写入'龙龙'后的文件,new_result结果
f.close()
输出结果:
文件指针
当我们读取文件内容时,并不能重复的读取,比如一个blog.txt文件里有blog内容,用两个read()方法读取blogCblog.txt的内容,会发现,第一个返回文件内容,第二个返回‘’。并不能重复读取,如果我想重复读取呢?怎么解决。
其实这跟文件指针有关,当我们对文件操作时,文件内部会有一个
文件指针来定位当前位置,如图:
with 自动打开/关闭文件,不需要再次关闭文件
with open(‘words.txt’) as fr
大文件操作
读出文件内容
with open('geng.txt',encoding='utf-8') as f:#f是文件对象,文件句柄
for line in f:#直接循环f的每一行,输出的就是文件的内容
line = line.strip()#如果有空行/头尾空格,去除
if line:#如果line不为空
print(line)#输出每一line的内容
输出结果:
啦啦啦
撒大声地所,胜多负少的
宋丹丹个人,一跑
饿货,一一
修改文件内容
#1、读取到文件所有内容
#2、替换 new_str
#3、清空原来的文件
#4、写进去新的
import os
with open('word.txt') as fr,open('new_word.txt','w')as fw:#打开原文件,再新建一个新文件做文件写入使用
for line in fr:#读出fr里面的全部内容
line = line.strip()#去除每一行的空格
if line:#如果line不为空
line = line.lower()#将每行内容切换小写
fw.write(line+'\n')#文件内容换行输出,因为上面做了去除空格和去除换行操作
os.remove('word.txt')#删除旧文件
os.rename('new_word.txt','word.txt')#新文件名替换成旧文件名
练习
1、监控日志文件,找到每分钟请求大于200的ip地址,加入黑名单
#1、监控日志文件,找到每分钟请求大于200的ip地址,加入黑名单
import time
point = 0
while True:
ips = {}#字典需要定义在循环里面,如果定义在外面,字典会越来越大,已经读过的ip还会再加到字典里
f = open('access.log', encoding='utf-8')
f.seek(point)#定义文件指针,每次指针指向上次ip出现的位置
for line in f:
line = line.strip()
if line:
ip = line.split()[0]#文件以空格做分割,取第一位就是ip
if ip in ips:
ips[ip] +=1#python,统计字典中的key出现的次数
else:
ips[ip] = 1#python,统计字典中的key出现的次数
point = f.tell()#记录当前文件指针的位置
f.close()
for ip in ips:
count = ips[ip]
if count>200:
print('要加入黑名单的ip地址是:{},已出现{}次'.format(ip,count))
time.sleep(60)
输出结果:
要加入黑名单的ip地址是:121.69.45.254,已出现203次
上一篇: Tomcat 多端口访问多个项目
下一篇: Tomcat9 多端口 多项目