No.004-Python-学习之路-Day2-set|文件操作
集合-set
集合内的数据对象都是唯一的-作用:去重集合是无序的存储结构,集合中的数据没有先后关系
集合内的元素必须是不可变对象
集合是可迭代的对象-即:可用for进行遍历
集合的作用主要有两个:去重,关系测试(交集,并集,差集,反向差集,子集)
1 # 创建set 2 set1 = set() # 使用set方法创建 3 print(set1, type(set1)) 4 5 set2 = {"Bruce", "Amadeus"} # 使用{}及值创建,注-空{}创建的是字典 6 print(set2, type(set2)) 7 8 9 # set去重 10 list1 = [1, 2, 3, 4, 1, 2, 3, 4, 5, 6] 11 list1 = set(list1) 12 print(list1, type(list1)) 13 14 15 # set关系测试 16 list1 = [1, 2, 3, 4, 1, 2, 3, 4, 5, 6] 17 list2 = [1, 2, 5, 7, 8, 9] 18 list1 = set(list1) 19 list2 = set(list2) 20 print(list1, list2) # 执行结果中便于对比 21 22 print(list1.intersection(list2)) # 两个集合的交集-方法intersection() 23 print(list1 & list2) # 两个集合的交集-运算符 "&" 24 25 print(list1.union(list2)) # 两个集合的并集-方法union() 26 print(list1 | list2) #两个集合的并集-运算符 "|" 27 28 print(list1.difference(list2)) # 两个集合的差集-方法difference() 29 print(list1 - list2) # 两个集合的差集-运算符"-" 30 31 print(list1.symmetric_difference(list2)) # 两个集合的对称差集-方法sy-diff() 32 print(list1 ^ list2) # 两个集合的对称差集-运算符 "^" 33 34 list3 = {1, 2, 5, 7} 35 print(list2.issuperset(list3)) # list2是不是list3的父集-方法issuperset() 36 print(list3.issubset(list2)) # list3是不是list2的子集-方法issubset() 37 38 list4 = {3, 4, 6} 39 print(list3.isdisjoint(list4)) # 判定两个集合是否存在交集-方法isdisjoint() 40 41 42 # 修改set 43 44 list1.add(999) # 添加单个集合元素 45 list1.update([666, 777, 888]) # 添加多个集合元素 46 47 list1.remove(777) # 删除特定元素,如果没有会报错 48 list1.discard(888) # 删除特定元素,如果没有不会报错 49 list1.pop() # 随机删除元素 50 51 set1.symmetric_difference_update() # 将对称差集的内容更新至set1 52 # 查询 53 54 len(list1) # 查询集合中元素个数 55 56 777 in list1 # 查询某元素是否在集合中 57 58 59 # 复制同列表
文件操作
在Python中,如果想要操作文件,首先需要创建或者打开指定的文件,并创建一个文件对象---->使用内置函数open()。
格式: open(file_dir, mode=‘r’, encoding='locale.getdefaultlocale()' ) mode具体信息如下:
1 # 获取相关的编码信息 2 # python编译器的编码格式与(读取.py文件)及调用encode()默认参数有关 3 # 操作系统默认支持的编码格式跟open函数参数encoding的默认值相关 4 import sys, locale 5 6 print(sys.getdefaultencoding()) # 获取python编译器内的默认编码格式 7 print(locale.getdefaultlocale()) # 获取操作系统默认支持的编码格式
1 # open打开文件的方式 2 3 data = open("goods_list.txt",encoding="UTF-8").read() #不规范的打开方式 4 print(data) # open所创建的对象未赋值给变量,在执行完read()函数后,即消失 5 6 f = open("goods_list.txt", encoding="UTF-8") # 打开文件并操作方式一 7 data = f.read() 8 print(data) 9 f.close() 10 11 with open("goods_list.txt", "r", encoding="UTF-8") as f: # 打开文件方式二 12 data = f.read() 13 print(data) # 此方法可以自动关闭,代码块执行完毕后自动释放
1 # 文件读取的方法 2 3 f = open("day3_file.txt", "r", encoding="UTF-8") # 建议一个文件对象 4 5 for line in f: # 文件对象是个可迭代的对象 6 print(line.rstrip()) 7 8 f.read() # 读取整个文件,返回字符串 9 f.readline() # 读一行并且指针下移一行 10 f.readlines() # 读整个文件,返回列表,元素为每行内容
1 # 文件写入的方式 2 f = open("day3_file.txt", "w", encoding="UTF-8") 3 4 f.write("我爱北京天安门\n") # 传入字符串,否则报错 5 6 list1 = ["我爱北京天安门\n", "天安门上太阳升\n"] 7 f.writelines(list1) # 传入列表类,否则报错
1 # 其他的一些方法 2 f = open("goods_list.txt", "r", encoding="UTF-8") 3 f.fileno() # 返回内存所用IO程序的编号 4 f.name() # 返回文件的名字 5 f.isatty() # 判断是否为终端交互设备 6 f.seekable() # 是否可以移动指针 7 f.readable() # 文件是否可读 8 f.writable() # 文件是否可读 9 f.closed() # 判断文件是否关闭 10 f.newlines # 未知2.7的,不要使用
1 # flush()与truncate()的使用 2 3 # flush() --->刷新 4 # 在write、writeline或writelines时,写的部分内容会存在内存缓存中,直到分配的内存缓存满了,才会向硬盘的文件中写 5 # flush方法会强制将缓存中的内容写入硬盘并清空缓存 6 # 在pycharm中看不到现象,直接运行解释器 7 8 with open("goods_list.txt", "w", encoding="UTF-8") as f: 9 f.write("Hello1") 10 f.flush() 11 f.write("Hello2") 12 13 14 # truncate()截断,自多少字节至尾清除,无参数则意味从头到尾清空
1 # 文件的修改 2 # 因为文件是直接存在硬盘中的 3 # 修改方式一:全部文件读入内存,改完后覆盖原文件并写回 4 # 修改方式二:新建一个文件,将源文件内容逐行读出->修改->写入新文件->修改文件名 5 # 方式一仅适合于小文件,方式二则可较广范围使用 6 7 # 方法二 8 import os 9 file_name = "file_edit_1.txt" 10 with open(file_name, 'r', encoding='UTF-8') as f1, open( 11 "middle_file.txt", "w+", encoding="UTF-8") as f2: 12 for line in f1:# 读取原文件内每行内容,并使用字符串的replace函数进行修改,并写入新文件 13 f2.write(line.replace(",", "-", 1)) 14 f2.close() 15 os.rename(file_name, "old_{}".format(file_name))# 原文件修改为old文件 16 os.rename("middle_file.txt", file_name)# 中间
1 # 在文件对象中存在指针,在读取文件时,指针会自动下移,可以使用seek参数调整 2 # 通常配合r+ w+ a+ 三种模式使用 3 # seek(偏移量,指定位置) 4 # 偏移量--> 相对指定位置偏移的字节数,>0向右 <0 向左 5 # 指定位置--> 0 代表文件开头, 1 代表当前位置 2 代表文件末尾 6 7 f = open("day3_file.txt", "r", encoding="UTF-8") 8 print(f.tell()) 9 print(f.readline()) 10 print(f.tell()) 11 f.seek(0, 0) # 等同于 f.seek(0),指定位置默认为0 12 print(f.tell()) 13 print(f.readline())
aaa