python集合、文件操作

集合

1、特点:天生去重
2、关系运算
3、基本操作(增删改查)

集合的关系运算,分为语句和符号两种:

list = set([1, 2, 3, 4, 8])
print(list, type(list))
list_2 = set([1,3,4,7,8,98,43])
list_3 = set([1,2,3,4,8,7,9])
print(list.intersection(list_2))
print(list & list_2)#交集

print(list.union(list_2))
print(list | list_2)#并集

print(list.difference(list_2))
print(list-list_2)#在list中不在list_2中

print(list_2.difference(list))
print(list_2-list)

print(list_2.issubset(list_3))
print(list2 <= list_3) #list_2是不是list_3的子集

print(list_3.issuperset(list))
print(list_3 >= list) #父集

print(list.symmetric_difference(list_3))
print(list ^ list_3)#对称差集

基本运算:增删改查

list = set([3, 5, 9, 10])
list2 = set("hello")

list.add(2)
list2.add('H')

print(list)
print(list2)

print(len(list))

print(3 in list)#测试是否是成员
print(2 not in list)

print(list.copy()) #返回一个list的浅copy
list_2 = set([0,4])
print(list.isdisjoint(list_2))#判断有没有交集,没有就返回ture



list.update([34,232,12]) #添加多项
print(list)

#删除
list.remove(2) #remove没有的元素会报错
print(list.pop()) #返回随机删除的一项

print(list.discard(23)) #需要制定要删除的元素,如果没有该元素,返回none,不会报错

文件操作

打开文件时注意编码格式
文件句柄
print顺序乱了
文件打开模式r、w、a

f.readlines 列表
for line in f.readlines():
print(line.strip())

f.readline()只适合读小文件
高级版:for line in f:

方法:
f.tell()光标的位置,按字符的个数
f.seek(0) 光标回到初始位置
f.detach() 文件编辑到一半更改文件编码格式,不需要掌握
f.encoding() 文件编码格式
f.errors 做异常用的,不需要掌握
f.fileno() 不需要掌握
f.seekable()不是所有的文件都可以seek
f.readable()
f.writeable()
f.flush() 文件读写可能没写进去,在缓存当中,(默认缓存满了刷到硬盘)不是每写一下就往硬盘上存,flush就是将缓存中的内容刷到硬盘上

sys.stdout.write() 往屏幕上输出内容,可以用for循环模拟进度条,每次都要flush,不然要等到缓存满了才刷,看不到效果
f.closed() 判断文件是否关闭
f.truncate() 什么不写就是清空,
f.truncate(10) 从文件开头开始结算

打开文件的几种常见类型:

读写:r+ 写只能从最后一行开始写,可以打开,读并且追加 (常用)
写读:w+ 创建一个文件
追加读写:a+
二进制模式读:rb ,不能有encoding参数, 运用在网络传输上(只能用二进	制模式传输)
二进制写:wb   f.write("hello\n".encode()) 文件是以二进制编码的,内部处理是二进制的,但不是显示就是二进制的

自己测试了以下三个功能

1、进度条
2、光标移动
3、 r+,w+

进度条

import sys
import time

for i in range(20):
    sys.stdout.write('#')
    sys.stdout.flush()
    time.sleep(1)

光标移动

f= open('yesterday.txt',encoding = 'utf-8')

print(f.readline())
print(f.tell())
f.seek(0)
print(f.tell())
print(f.readline())
f.close()

不同文件打开方式

尝试从头修改文件内容的时候,报编码错误,下面学习编码的时候再来解释一波

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xae in position 18: invalid start byte

搜了一下,发现应该是编码不全问题,换了其他字就好了,不能在末尾加a,很神奇

f = open('yesterday2.txt', 'r+', encoding='utf-8')

print("first:", f.readline())
print("second:", f.readline())
print("third:", f.readline())
f.write("\n3我爱北京天安门\n")
f.write("3天安门上太阳升")

print(f.tell())
f.seek(0)
f.write("\n北京欢迎你a")#有内容的情况下,不能从头写,会出现错误

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值