一、文件处理
打开文件,得到文件句柄并赋值给一个变量
通过句柄对文件进行操作
关闭文件
- r模式,默认模式,文件不存在
则报错
- w模式,文件不存在
则创建
,文件存在则覆盖
- a模式,文件不存在
则创建
,文件存在则不会覆盖
,写内容会以追加的方式写(写日志文件的时候常用),追加模式是一种特殊的写模式 - b(rb,wb,ab)模式:不用加
encoding:utf-8
##打开文件,得到文件句柄并赋值给一个变量(操作系统调用)
f=open('c.txt',mode='r',encoding='utf-8') #告诉系统我们使用字符集
# 读/写
data=f.read()
print(data)
#关闭
f.close() #回收操作系统的资源
# f.read() #再次读取就显示文件被关闭了,也证明了上面close回收系统资源
#结果:
1您好11 #如果没有第二行的enconding,就会乱码,因为python3默认utf-8 但widonws GBK
222
333
实操案例
f=open('c.txt','rb')
# print(f.read())
print(f.read().decode())
f=open('d.txt','wb') #打开d文件
f.write('啦啦啦'.encode('utf-8')) ##写入啦啦啦,指定字符集
f.close() #回收系统资源
二、基本操作
1.文件打开模式
文件句柄=open('文件路径',‘模式’)
打开文件时,需要指定文件路径和以什么方式打开文件。
打开文件的模式有:
r ,只读模式【默认模式,文件必须存在,不存在则抛出异常】
w,只写模式【不可读;不存在则创建;存在则清空内容】
x, 只写模式【不可读;不存在则创建,存在则报错】
a, 追加模式【可读; 不存在则创建;存在则只追加内容】
三、文件的修改
当文件很大时,刚刚的方法在一次性读取文件内容和写入新内容时,耗时长,占用磁盘空间也较大。
备份文件的方法可以建立一个备份文件,修改一行写一行,具体步骤如下:
(1)打开2个文件,原文件b和备份文件.bak 。如b.txt words.bak
(2)删除b文件,将b文件名改为words.bak文件名
例:将文件b.txt里的“花”改成“flower”
f=open('b.txt','r+',encoding='utf-8')
f.write('花_lii,2323\n花_mmm,2332\n花_shens,2883\n')
#
f.close()
###修改文件
import os
with open('b.txt',encoding='utf-8') as fr,open('.words.bak','w',encoding='utf-8')as fw:
for line in fr:
new_line = line.replace('花','flower')
fw.write(new_line)
os.remove('b.txt') #删除文件
os.rename('.words.bak','b.txt') #改名
四、小练习
1、获取手机号,前面181117+ 后四位随机,写到文件里。
分析:(1)首先要随机产生一些四位数,位数不足的要补0,zfill可以给字符串补0;
(2)需要写到文件里,可以用w或者a模式。文件有打开就要有关闭。
# import random
# f = open('dg.txt','w')
# num = int(input('您需要几个手机号: '))
# for i in range(num):
# start = '1581117'
# random_num = str(random.randint(1,9999)) #确定随机数的范围
# new_num = random_num.zfill(4) #位数不足4位,用0来补
# p_num = start + new_num #手机号拼接
# f.write(p_num+'\n') #写入文件
# f.close() #关闭文件
##下面是查看结果
# a = open('dg.txt','r',encoding='utf-8')
# print('您获得的手机号:',a.readlines())
# a.close()
2,查找出http访问量最高的几个IP地址(配合防火墙+lua 有效屏蔽恶意攻击)
监控服务器日志,如果ip出现的次数大于50次,就把该ip加入黑名单。日志文件的格式如下图
- QQ精品交流群
-
- 微信公众号
-