python学习笔记:文件操作和集合
一、文件操作
文件读写步骤:有一个文件,打开文件,操作文件读写文件,关闭文件。
python 文件读写模式r,r+,w,w+,a,a+的区别(附代码示例)
| 模式 | 可做操作 | 若文件不存在 | 是否覆盖 |
| r | 只能读 | 报错 | - |
| r+ | 可读可写 | 报错 | 是 |
| w | 只能写 | 创建 | 是 |
| w+ | 可读可写 | 创建 | 是 |
| a | 只能写 | 创建 | 否,追加写 |
| a+ | 可读可写 | 创建 | 否,追加写 |
这里假设在当前目录下有一个文件名为users.txt的文本文件,里面的数据如下:
yangfan,123123123
niudashen,123123123
xiaohong,123123123
1、文件基本操作
# 第一步:(以追加模式)打开文件
f=open('users.txt','a+')
# 第二步:读取文件内容
print(f.read())
# 第三步:文件写操作
f.write('yangfan,4444\n')
# 第三步:关闭文件
f.close()
2、文件读操作
# 读取整个文件内容
f=open('user.txt','r+') # 获取到文件里面所有的内容,返回的是字符串
print(f.read()) # 获取到文件里面所有的内容,放在一行的list里面
# ['yangfan,123123123\n', 'niudashen,123123123\n', 'xiaohong,123123123\n']
print(f.readlines()) # 一次获取一行数据,读取文件指针所在行,再次读时会从下一行开始
print(f.readline()) # yangfan,123123123
print(f.readline()) # niudashen,123123123 # 读写二进制文件:rb、wb、ab
# "b"表示处理二进制文件,适用于图片、音乐、视频等等等等
res=open('333.jpg','rb') # 高效处理文件
#大文件时,用上面的read()和readlines()方法操作文件的话,会先把文件所有内容读到内存中,这样的话内存数据一多会非常卡,读取文件高效的操作方法,就是读一行操作一行,读过的内容就从内存中释放了。
#以下这种方式,line就是每行文件的内容,读完一行的话,就会释放一行的内存
f = open('file.txt')
for line in f:
print(line)
3、修改文件的两种方式
# 一种是把文件的全部内容都读到内存中,然后把原有的文件内容清空,重新写新的内容;
f = open(r'C:\Users\nhy\Desktop\file.txt',encoding='utf-8')
res = f.read().replace('一点','二点')
f.close()
f = open(r'C:\Users\nhy\Desktop\file.txt',mode='w',encoding='utf-8')
f.write(res)
f.flush() #立即把缓冲区里面的内容,写到磁盘上
f.close()
# 第二种是把修改后的文件内容写到一个新的文件中。
with open('file.txt',encoding='utf-8') as f, open('file.txt.bak','w',encoding='utf-8') as f2:
for line in f:
new_line = line.replace('二点','一点')
f2.write(new_line)
4、小练习:日志监控
要求:
1、要从日志里找到1分钟之内访问超过200次的ip
2、每分钟运行一次
提示:
1、读取文件内容,获取到IP地址
2、把每个ip地址存起来,列表或字典
3、判断ip访问的次数是否超过200次
4、超过的话ip加入黑名单
import time
point = 0 #初始的位置
while True:
ips = {}
f = open('access.log',encoding='utf-8')
f.seek(point) #移动文件读取指针到指定位置 for line in f : #循环取文件每行数据
ip = line.split()[0] #按照空格分割,取第一个元素就是ip
if ip in ips:# 判断这个ip是否存在
ips[ip] +=1#如果存在次数+1
else:
ips[ip]=1#如果不存在ip的次数就是1
print(ips) point = f.tell()#记录文件指针位置
f.close() for ip, count in ips.items(): #同时取到 k v,#循环这个字典,判断大于200的
if count >=200:
print('%s 加入黑名单'%ip)
time.sleep(60)
二、集合(set)
集合(set)是一个无序不重复元素的序列。
集合天生可以去重,可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
#创建格式
parame = {value01,value02,...}
或者
set(value) #类型转换
l=[1,1,2,3,4,5]
res=set(l)
print(res)
#{1, 2, 3, 4, 5}
1、集合的交集和并集
jihe=set() # 定义一个空的集合 xingneng=['一','二','三','四']
zidonghua=['一','二','五'] xn=set(xingneng)
zdh=set(zidonghua) #取交集,两个集合都有的取出来
res1=xn.intersection(zdh)
res2=xn&zdh #取并集,把两集合合并到一起,探后去重
res3=xn.union(zdh) # 差集,在xn中有,在zdh中没有的
res4=xn.difference(zdh)
res5=xn-zdh #不对称差集,两个里面不重复的
res6=xn.symmetric_difference(zdh)
res7=xn ^ zdh print(res1)
print(res2)
print(res3)
print(res4)
print(res5)
print(res6)
print(res7) # 结果是:
# {'一', '二'}
# {'一', '二'}
# {'三', '五', '一', '四', '二'}
# {'三', '四'}
# {'三', '四'}
# {'三', '五', '四'}
# {'三', '五', '四'}
2、集合实例
import string
l1=set(string.ascii_lowercase)#打印全部的英文字母
l2={'a','b','c'}
#判断l2是不是l1的子集
print(l2.issubset(l1)) #有交集返回False,没有交集返回Ture
print(l1.isdisjoint(l2))
3、集合中增加元素
# 集合中增加删除元素
l2.add('s')# 增加元素
l2.remove('a')# 删除指定元素
l2.pop()# 删除随机元素,因为没有下标,所以不能找下标删除
4、集合的循环
for l in l1:
print(l)
python学习笔记:文件操作和集合的更多相关文章
- python学习笔记:文件操作和集合(转)
转自:http://www.nnzhp.cn/article/16/ 这篇博客来说一下python对文件的操作. 对文件的操作分三步: 1.打开文件获取文件的句柄,句柄就理解为这个文件 2.通过文件句 ...
- 03 python学习笔记-文件操作(三)
本文内容主要包括以下方面: 1. 文件操作基本认识2. 只读(r, rb)3. 只写(w, wb)4. 追加(a, ab)5. r+读写6. w+写读7. a+写读(追加写读)8. 文件的修改 一.文 ...
- Python学习笔记——文件操作
python中,一切皆对象. 一.文件操作流程 (1)打开文件,得到一个文件句柄(对象),赋给一个对象: (2)通过文件句柄对文件进行操作: (3)关闭文件. 文件对象f通过open()函数来创建 ...
- [Python学习笔记]文件的读取写入
文件与文件路径 路径合成 os.path.join() 在Windows上,路径中以倒斜杠作为文件夹之间的分隔符,Linux或OS X中则是正斜杠.如果想要程序正确运行于所有操作系统上,就必须要处理这 ...
- python基础学习笔记——文件操作
文件操作 初始文件操作 使用Python来读写文件是非常简单的操作,我们使用open()函数来打开一个文件,获取到文件句柄,然后通过文件句柄就可以进行各种各样的操作了 根据打开方式的不同能够执行的操作 ...
- python学习总结---文件操作
# 文件操作 ### 目录管理(os) - 示例 ```python # 执行系统命令 # 清屏 # os.system('cls') # 调出计算器 # os.system('calc') # 查看 ...
- Python学习笔记四--字典与集合
字典是Python中唯一的映射类型.所谓映射即指该数据类型包含哈希值(key)和与之对应的值(value)的序列.字典是可变类型.字典中的数据是无序排列的. 4.1.1字典的创建及赋值 dict1={ ...
- python学习日记(文件操作)
文件操作概述 计算机系统分为:操作系统,计算机硬件,应用程序. 我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操作硬件,众所周知,应用程序 ...
- erlang学习笔记(文件操作)
参考这里和这里了解到的文件操作的模块有很多:kernel下有:file,stdlib下有:filelib,filename,file_sorter.(具体查看官方文档)
- python学习day8 文件操作(深度学习)
文件操作 (day7内容扩展) 1 文件基本操作 obj = open('路径',mode='模式',encoding='编码')obj.write()obj.read()obj.close() 2 ...
随机推荐
- Vue2.0---webpack打包知识点-1
打包上线或者将项目做成产品的肯定不希望暴露自己源码 在config的index.js中将productionGzip设置为false即可.(使之不生成.map文件). 对Vue-cli的webpack ...
- 常用缓存淘汰算法(LFU、LRU、ARC、FIFO、MRU)
缓存算法是指令的一个明细表,用于决定缓存系统中哪些数据应该被删去. 常见类型包括LFU.LRU.ARC.FIFO.MRU. 最不经常使用算法(LFU): 这个缓存算法使用一个计数器来记录条目被访问的频 ...
- Python - zipfile 乱码问题解决
最近使用zipfile进行解包过程中遇到了很不舒服的问题,解包之后文件名是乱码的.下面进行简单总结: 首先,乱码肯定是因为解码方式不一样了,zipfile使用的是utf-8和cp437这两种编码方式, ...
- python发送邮件,文件后缀变成了bin
问题:在用python做自动化测试时,将html测试报告在邮件中添加文件发送的过程中,发现发送成功后,文件的后缀为.bin 解决方法: 加一行代码 msg_att["Content-Disp ...
- Javascript基础四(数组,字符,对象,日期)
第一节:数组 1.数组的概念及定义 可以存放一组数据: 当需要操作多个数据时: 2.数组的创建方式 var arr1 = [1,2,3]; //字面量方式 var arr2 ...
- PHP 接口签名验证
目录 概览 常用验证 单向散列加密 对称加密 非对称加密 密钥安全管理 接口调试工具 在线接口文档 扩展 小结 概览 工作中,我们时刻都会和接口打交道,有的是调取他人的接口,有的是为他人提供接口,在这 ...
- windows 安装 jenkins笔记
Jenkins 所有镜像列表: http://mirrors.jenkins-ci.org/status.html 可在镜像网站上下载安装文件,比官方下载快些 jenkins 官网地址: https: ...
- spring需要表
DROP TABLE IF EXISTS `user`;CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` ...
- SpringBoot使用Swagger2搭建强大的RESTful API 文档功能
swagger用于定义API文档. Swagger2的使用 Maven Plugin添加Swagger2相关jar包 <!--swagger2 start--> <dependenc ...
- php time()函数 语法
php time()函数 语法 time()函数怎么用? php time()函数用来返回当前时间的unix时间戳.语法是time(),返回自从 Unix 纪元(格林威治时间 1970 年 1 月 1 ...