Week3-python笔记

Week 3

1 集合操作

1.1 定义

集合是一个无序的,不重复的数据组合,它的主要作用如下:

  • 去重,把一个列表变成集合,就自动去重了;
  • 关系测试,测试两组数据之前的交集、差集、并集等关系。

1.2 常用操作

list1 = [1,2,3,0,9,4,4,6,6,8,8]
list2 = [1,4,6,8]
list1 = set(list1)
list2 = set(list2)
print(list1,type(list1))  # 转为集合去重
print(list1.intersection(list2))  # 交集 like '&',使用运算符两个type都是set
print(list1.union(list2)) # 并集 like '|'
print(list1.difference(list2)) # 差集 in list1 but not in list2 like '-'
print(list1.symmetric_difference(list2)) # 对称差集 in list1 or in list2 but not both in list1 and list2 like '^'
print(list1.issubset(list2)) # list1是否为list2的子集 like '<='
print(list1.issuperset(list2)) # list1是否为list2的父集 like '>='
print(list1.isdisjoint(list2)) # 不存在交集返回为ture

list1 = set([1,2,3,0,9,4,4,6,6,8,8])
list2 = set([1,4,6,8])
list2.add(2)   # 添加
list2.update([2,0,10]) # 添加多项
print(list2)
print(list1.remove(0)) # 指定存在元素删除
print(list1.pop()) # 随机删除元素并返回
print(list1.discard(10))  # 删除不存在元素不报错

2 字符串(补充)

定义:它是一个有序的字符的集合,用于存储和表示基本的文本信息,‘’或“”或‘’‘ ’‘’中间包含的内容称之为字符串。

特性:

1.只能存放一个值

2.不可变

3.按照从左到右的顺序定义字符集合,下标从0开始顺序访问

补充:
  1.字符串的单引号和双引号都无法取消特殊字符的含义,如果想让引号内所有字符均取消特殊意义,在引号前面加r,如name=r'l hf'
  2.unicode字符串与r连用必需在r前面,如name=ur'l hf'

3 文件操作

3.1 文件处理流程

  1. 打开文件,得到文件句柄并赋值给一个变量
  2. 通过句柄对文件进行操作
  3. 关闭文件
#data = open("yesterday once more",encoding='utf-8').read()
f =open('yesterday once more','r+',encoding='utf-8')   # 文件句柄,将打开的文件对象赋值给变量
first_line = f.readline()
print('first line:',first_line) # 读一行
data = f.read() # 光标读完一次,光标在文件最后
print(data)
f.write('卡朋特乐队') 
f.close() # 关闭文件

3.2 文件打开模式

打开文件的模式有:

  • r ,只读模式【默认模式,文件必须存在,不存在则抛出异常】
  • w,只写模式【不可读;不存在则创建;存在则清空内容】
  • x, 只写模式【不可读;不存在则创建,存在则报错】
  • a, 追加模式【可读;不存在则创建;存在则只追加内容】

"+" 表示可以同时读写某个文件

  • r+, 读写【可读,可写】
  • w+,写读【可写,可读】
  • x+ ,写读【可读,可写】
  • a+, 写读【可读,可写】

 "b"表示以字节的方式操作

  • rb  或 r+b
  • wb 或 w+b
  • xb 或 w+b
  • ab 或 a+b

 注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码。

3.3 其他操作

f =open('yesterday once more','r+',encoding='utf-8')   # 文件句柄,将打开的文件对象赋值给变量
f.seek(0)  # 重置文件光标
f.tell() # 光标所在位置
f.truncate(10) # 从10开始截断
f.closed # 文件是否关闭
f.readable() # 文件打开是否可读
f.writable() # 文件打开是否可写
f.flush() # 强制写入硬盘

flush原理:

  1. 文件操作是通过软件将文件从硬盘读到内存;
  2. 写入文件的操作也都是存入内存缓冲区buffer(内存速度快于硬盘,如果写入文件的数据都从内存刷到硬盘,内存与硬盘的速度延迟会被无限放大,效率变低,所以要刷到硬盘的数据我们统一往内存的一小块空间即buffer中放,一段时间后操作系统会将buffer中数据一次性刷到硬盘);
  3. flush即,强制将写入的数据刷到硬盘。

3.4 文件的修改 

f = open('yesterday once more','r',encoding='utf-8')
f_new = open('yesterday once more.bak','w',encoding='utf-8')

for line in f:  # 可以用该语句循环读文件,不建议用readline
    if 'young' in line:
        line=line.replace('young','old')
    f_new.write(line)
f.close()
f_new.close()

 为了避免打开文件后忘记关闭,可以通过管理上下文,即:

with open('log1') as obj1, open('log2') as obj2:

4 字符转码

msg = "你好,世界"
msg_gbk = msg.decode("unicode").encode("gbk")
原文地址:https://www.cnblogs.com/cirr-zhou/p/8479010.html