Python集合&文件操作Day03
Posted baylor-chen
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python集合&文件操作Day03相关的知识,希望对你有一定的参考价值。
集合
主要作用:
- 去重
- 关系测试, 交集\差集\并集\反向(对称)差集
1 #集合定义 2 list_1 = [1,2,3,4,5,3,6,] 3 list_dict = {1,2,3,4,5,6,7,6,8} 4 #集合操作 5 list_1 = set(list_1) #创建一个唯一的字符集---去重 6 print(set(list_dict)) #创建一个唯一的字符集---去重 7 print(list_1,type(list_1)) 8 list_2 = set([2,6,0,66,22,8,4]) 9 print(list_1.intersection(list_2)) #交集 -取出重复的数字 10 print(list_1.union(list_2)) #并集 去重-统一显示 {0, 1, 2, 3, 4, 5, 6, 66, 8, 22} 11 print(list_1.difference(list_2)) #差集 取出list_1有,list_2没有的 12 list_3 = set([1,3,6]) 13 print(list_3.issubset(list_1)) #子集 list_3的值在list_1全有 14 print(list_1.issuperset(list_3))#父集 15 print(list_1.symmetric_difference(list_2))#对称差集-list_1,list_2互相没有的取出来 16 list_4 = set([7,8,9,3]) 17 print(list_3.isdisjoint(list_4)) #返回True,如果两个参数有一个零交叉点 18 print("-------------") 19 print(list_1 & list_2) #交集 20 print(list_1 | list_2) #并集 21 print(list_1 - list_2) #差集 list_1不带list_2 22 print(list_1 ^ list_2) #对称差集 23 24 #集合操作 25 print("-------------") 26 list_1.add(999) #添加 27 print(list_1) 28 list_1.update([777,888]) #添加多项f 29 print(list_1) 30 print(list_1.remove(999)) #删除 返回 none 31 print(list_1) 32 print(list_1.pop()) #随机删除 33 print(list_1.discard(888)) #删除 返回 none
文件操作
open函数,该函数用于文件处理
操作文件时,一般需要经历如下步骤:
- 打开文件
- 操作文件
- 关闭文件
准备文件保存为file.txt格式:
1 北国风光,千里冰封,万里雪飘。 2 3 望长城内外,惟余莽莽;大河上下,顿失滔滔。 4 5 山舞银蛇,原驰蜡象,欲与天公试比高。 6 7 须晴日,看红装素裹,分外妖娆。 8 9 江山如此多娇,引无数英雄竞折腰。 10 11 惜秦皇汉武,略输文采;唐宗宋祖,稍逊风骚。 12 13 一代天骄,成吉思汗,只识弯弓射大雕。 14 15 俱往矣,数风流人物,还看今朝。
文件基本操作
1 f = open(‘file.txt‘, ‘r‘) #以只读方式打开一个文件,获取文件句柄,如果是读的话,r可以不写,默认就是只读 2 frist_line = f.readline() # 获取文件的第一行内容,返回的是一个list 3 print(frist_line) # 打印第一行 4 res = f.read() # 获取除了第一行剩下的所有文件内容 5 print(res) 6 f.close() # 关闭文件
打开文件的模式有:
- r,只读模式(默认)。
- w,只写模式。【不可读;不存在则创建;存在则删除内容;】
- a,追加模式。【可读; 不存在则创建;存在则只追加内容;】
"+" 表示可以同时读写某个文件
- r+,可读写文件。【可读;可写;可追加】
- w+,写读
- a+,同a
"U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用)
- rU
- r+U
"b"表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注)
- rb
- wb
- ab
1 f = open("file.txt",‘r+‘,encoding="utf-8") #文件句柄-文件的内存对象(文件名,字符集,大小。。) 2 print(f.read()) #读取整个文件 3 print(f.readline()) #读取一行 4 print(f.readlines()) # 按行存成列表 5 lens = len(open(‘file.txt‘,‘rU‘).readline()) 6 print(lens) #打印文件共有多少行 7 for i in f.readlines()[2:lens]: # 指定文件行数读取 #从第2行到结尾 8 print(i) 9 print(f.readline()) 10 print(f.tell()) #计算字节数 11 f.seek(3) #返回光标 12 print(f.readline()) 13 print(f.encoding) #打印字符集 14 print(f.fileno()) #返回文件句柄在内存的编号 3 15 print(f.name) #打印文件名 16 print(f.seekable()) #判断文件光标是否能移动 True 17 print(f.readable()) #判断文件是否可读 True 18 print(f.writable()) #判断文件是否可写 False 19 f.flush() #刷新 20 f.truncate(10) #文件清空 不传入值清空文件,传值从头开始截断
1 #刷洗方法使用 进度条 2 import sys,time 3 for i in range(50): 4 sys.stdout.write(‘#‘) 5 sys.stdout.flush() #刷新 进度条 6 time.sleep(0.1)
文件循环操作
1 f = open("file.txt", ‘r‘, encoding="utf-8") 2 f_new = open(‘file.bak‘, ‘w‘, encoding=‘utf-8‘) 3 for line in f: 4 if ‘江山如此多娇,引无数英雄竞折腰‘ in line: 5 line = line.replace(‘江山如此多娇,引无数英雄竞折腰‘, ‘春色满园关不住,一枝红杏出墙来.‘) # if username == line .strip(): 6 f_new.write(line) 7 f.close() 8 f_new.close()
with使用:
- 在操作文件的时候,经常忘了关闭文件,这样的就可以使用with,它会在使用完这个文件句柄之后,自动关闭该文件,使用方式如下:
1 # 同时打开多个文件格式: 2 # with open(‘file.txt‘, ‘r‘, encoding=‘utf-8‘) as f, open(‘file.bak‘, ‘r‘, encoding=‘utf-8‘) as j: 3 4 with open(‘file.txt‘, ‘r‘, encoding=‘utf-8‘) as f: # 自动关闭文件 5 for line in f: 6 print(line) 7 # 同时打开多个文件建议写成 8 with open(‘file.txt‘, ‘r‘, encoding=‘utf-8‘) as f, 9 open(‘file.bak‘, ‘w‘, encoding=‘utf-8‘) as j: 10 for line in f: 11 if ‘江山如此多娇,引无数英雄竞折腰‘ in line: 12 line = line.replace(‘江山如此多娇,引无数英雄竞折腰‘, ‘春色满园关不住,一枝红杏出墙来.‘) # if username == line .strip(): 13 j.write(line)
资料补充
ASCII 默认8位 只能存英文&特殊字符,不能存储中文,unicode 万国码 默认2个字节,unicode被称为万国码,每个国家都的语法他都含有,utf-8是万国码的扩展集
utf-8 可变长的字符集,所有英文字符依然按ascii存储,所有中文字符统一3个字节。
python2 —python 直接转
字符编码的转换都是有规律的一个gbk的编码想转换成utf-8需要先转为unicode作为中间者,然后在转为utf-8
当然在转换时也要注意 解码decode成unicode 编码encode成你需要的字符集
同时、在decode和是需要告诉unicode你是什么字符来解码成unicode如下面代码
1 print(sys.getdefaultencoding()) # 获取当前系统字符集 2 msg = "我爱北京天安门" 3 msg_gb2312 = msg.encode("gb2312") 4 print(msg_gb2312) 5 print(msg_gb2312.decode(‘gb2312‘)) 6 7 gb2312_to_gbk = msg_gb2312.decode("gbk").encode("gbk") 8 print(gb2312_to_gbk)
!--?xml>!--?xml>
以上是关于Python集合&文件操作Day03的主要内容,如果未能解决你的问题,请参考以下文章
Python——day3_基础1_集合,文件操作,字符编码与转码
Day388.Selector&Pipe&fileLock文件锁&Path&Files&AsynchronousFileChannel异步通道 -NIO(代码片