文件操作分为:

1、打开文件,如果文件在当前目录下直接写文件名,如果文件在其他目录下写绝对路径

2、读/写文件

3、关闭文件

一、文件打开模式

# 'r':只读,文件读取后,会有文件指针记录读取文件的行数
# 'w':只写,会把以前的内容清空掉,建议写新文件时,使用w模式
# 'a':只追加
# 'r+' == r+w(可读可写,文件若不存在就报错(IOError))
# 'w+' == w+r(可读可写,文件若不存在就创建)
# 'a+' ==a+r(可追加可写,文件若不存在就创建)
# 对应的,如果是二进制文件,就都加一个b就好啦:
# 'rb'  'wb'  'ab'  'rb+'  'wb+'  'ab+'

二、读文件

 1 f = open('a.txt','r',encoding='utf-8')#打开模式r w a
2 result1 = f.readline()#读文件,一次只读一行
3 print(result1)
4 result = f.read()#读文件,获取文件里的全部内容
5 result2 = f.readlines()#读文件,把文件里的内容放到一个list里,每一行是一个元素
6 #f.read(),f.readlines()这两个方法当文件很大时,会占用很大的内存
7 print(result2)
8 #处理大文件的时候,循环读取
9 for line in f:
10 print(line)
11 f.close()#关闭文件

三、写文件

1 f1 = open('a1.txt','w',encoding='utf-8')#打卡模式r w a
2 f1.write('12')#这个是一次写一行
3 #print(f.read())
4 l = ['fdslfjs\n','fdsrewr\n','fdsfsdfrere\n']
5 f1.writelines(l)#将列表写到文件中
6 #循环写入
7 for i in l:
8 f.write(i)
9 f1.close()

四、监控日志小练习

 1 #1、监控,一直在运行,死循环,每分钟读一次文件
2 #2、第一次运行,读取文件所有的内容,从文件内容里获取到IP地址,及每个IP地址出现的次数
3 #3、判断每个IP地址出现的次数,如果大于大于50次,那么发短信告警
4 #4、等待60秒,继续重复上面的操作,读文件,获取内容
5 import time
6 point = 0#最前面
7 while True:
8 ip_list = {} #ip:ipcount
9 f = open('access.log', encoding='utf-8')
10 f.seek(point)#移动文件指针到哪个位置
11 for line in f:
12 ipStr = line.split()[0]
13 if ipStr not in ip_list:
14 ip_list[ipStr] = 1#不存在则加入统计
15 else:
16 ip_list[ipStr] += 1#存在则修改统计次数
17 point = f.tell()#当前文件指针的位置
18 f.close()
19 for ip in ip_list:
20 ipCount = ip_list.get(ip)#获取IP的统计次数
21 if(ipCount >= 50):
22 print('请求次数超过5次的IP:%s,请求次数为:%s'%(ip,ipCount))
23
24 time.sleep(60)

五、排序小练习

 1 #根据每个人跑步的公里数 重新排序每个人的排名,格式 1. 毛多锁 500km
2 #1、打开文件
3 #2、将文件的内容循环读取,存放到字典中
4 #3、给字典排序
5 #4、将排序好的字典写到一个新的文件中
6
7 run_scores = {}
8 f = open('数据.txt',encoding='utf-8')
9 for userinfo in f:
10 temp1 = userinfo.split()#用空格分割,将名字和跑步公里数分割
11 run_scores[temp1[1]] = float(temp1[2])#将文件中的内容放入字典中
12
13 f.close()#关闭文件
14 print(run_scores)
15 #将字典进行降序排序
16 run_scores_sort = dict(sorted(run_scores.items(), key=lambda x: x[1],reverse=True))
17 print(run_scores_sort)
18 new_file = open('排序.txt','w',encoding='utf-8')#打开一个新的文件,用来存放排序后的内容
19 count = 0#定义编号
20 for temp2 in run_scores_sort:#遍历排序后的字典
21 count += 1
22 runScore = run_scores_sort[temp2]#获取跑步总公里数
23 result = '%d. %s %.2fkm\n' % (count,temp2,runScore)
24 print(result)
25 new_file.write(result)#将排序后的结果写入新的文件
26
27 new_file.close()

执行结果如图所示:

六、注册小练习

 1 #注册用户,注册的逻辑和以前一样,注册成功的用户写到users.txt里面,写的数据格式和文件里面的一样
2 #1、输入注册的账号
3 #2、注册的账号不能为空
4 #3、注册的账号不能存在于users.txt文件中
5 #4、注册的密码,确认密码不能为空
6 #5、密码与确认密码一致,才能注册成功
7 #6、将注册的账号,密码追加到users.txt文件中
8 f = open(r'users.txt', 'r', encoding='utf-8') # 将打开文件模式定义为r:只读
9 results = f.readlines()#将文件内容读取到list中
10 f.close() # 关闭文件
11 for i in range(3):
12 checkUser = False#定义一个检查用户是否存在的flag
13 username = input('请输入注册的账号:').strip()#获取输入的账号
14 if username:#注册账号不为空,则继续验证
15 for line in results:#循环读取文件,检查注册账号是否存在
16 userinfo = line.split(',')#分割
17 if username == userinfo[0]:
18 checkUser = True
19 print('输入的账号已存在!!!')
20
21 if not checkUser:#当用户不存在时,进行注册
22 password = input('请输入注册的密码:').strip() # 获取输入的密码
23 rePassword = input('请输入确认密码:').strip() # 获取输入的确认密码
24 if password and rePassword:
25 if password == rePassword:
26 print('恭喜你,注册成功!')
27 new_file = open(r'users.txt', 'a', encoding='utf-8') # 将打开文件模式定义为a:可追加
28 tempResult = '%s,%s\n' % (username, password)
29 print(tempResult)
30 new_file.write(tempResult)
31 new_file.close() # 关闭文件
32 break
33 else:
34 print('两次输入的密码不一致!')
35 else:
36 print('密码/确认密码不能为空')
37 else:
38 print('输入的账号不能为空')
39
40 else:
41 print('错误次数已达上限!')

最新文章

  1. List [][]
  2. Android Studio导入项目慢的问题
  3. netflix:Conductor微服务编排引擎
  4. ssl原理,非对称加密握手,对称加密传输
  5. Shell 判断
  6. Unity3d 内置图形界面系统(Editor GUI)
  7. 【转】windows下安装和调用curl的方法
  8. 压缩和解压缩gz包
  9. linux下proc目录详解
  10. 树形菜单复选框级联选择HTML
  11. C++学习笔记——一只P转C的OIer的学习历程
  12. .NET中反射机制的使用与分析
  13. aix installp软件包管理工具
  14. css 的一些知识点的整理
  15. Jmeter(三)_配置元件
  16. Linux S和T权限
  17. bzoj1831 逆序对 (dp+树状数组)
  18. Word设置多级标题
  19. spring cloud(一)带你进入分布式
  20. personalblog

热门文章

  1. Python+Selenium自动化-模拟键盘操作
  2. GO语言基础---值传递与引用传递
  3. TensorFlow优化器及用法
  4. Httprunner的使用
  5. ES6中的数组方法扩展
  6. 狂神说JUC学习笔记(一)
  7. 【题解】poj 3162 Walking Race 树形dp
  8. Unity中各种查找物体的方法
  9. 什么是DDoS引导程序IP Stresser?
  10. 春风十里不如你,全新Windows UI 3(WinUI 3) 的第一个实现Project Reunion 0.5