python之初级篇2

一、数字类型

1)整数 int 类型

    - bit_length()  # 查询以二进制表示一个数字的值所需的位数
    - int.from_bytes(bytes,byteorder)  # 返回给定字节数组所表示的整数。
    - int.to_bytes(length,byteorder)   # 返回表示整数的字节数组。

2)浮点数  float 类型

    - is_integer # 如果浮点数是整数,则返回True
      collections:Python内建的一个集合模块,提供了许多有用的集合类。
    - Counter     # 是一个简单的计数器,例如,统计字符出现的个数:
    - OrderedDict # 可以实现一个FIFO(先进先出)的dict,当容量超出限制时,先删除最早添加的Key:
    - deque       # 是为了高效实现插入和删除操作的双向列表,适合用于队列和栈:
    - defaultdict # 使用dict时,如果引用的Key不存在,就会抛出KeyError。如果希望key不存在时,返回一个默认值,就可以用defaultdict:

二、集合

1)集合的意义,使用。便于计算

pythoners = ['张大炮','李二毛','王麻子','Lina','user']
linuxers = ['wxx','sbsb','逗比','张三疯','Lina','user']
pl = []
for name in pythoners:
    if name in linuxers:
        pl.append(name)
print(pl)

可以理解为2列表的交集运算。集合可以专门计算这样的类型

1)集合的运算

1、 |        合集          ==>  intersection
2、 &        交集          ==>  union
3、 -        差集          ==>  difference
4、^         对称差集      ==>   symmetric_difference
5、>,>=      父集          ==>  issuperset
6、<,<=      子集
7、 ==       等于运算
8、判断是否有共同部分    ==> isdisjoint  。有False,没有Frue
pythoners = {'张大炮','李二毛','王麻子','Lina','user'}
linuxers = {'wxx','sbsb','逗比','张三疯','Lina','user'}
# 求交集
print(pythoners & linuxers)
print(pythoners.intersection(linuxers))
# 求所有的元素,并集
print(pythoners | linuxers)
print(pythoners.union(linuxers))
# 差集
print(pythoners - linuxers)
print(pythoners.difference(linuxers))
# 对称差集
print(pythoners ^ linuxers)
print(pythoners.symmetric_difference(linuxers))
print(len(pythoners ^ linuxers))
# 等于运算 ==
s1 = {1,2,3}
s2 = {1,2,3}
print(s1 == s2)
# 父集
s1 = {1,2,3}
s2 = {1,2}
print(s1 >= s2)
print(s1.issuperset(s2))
# 子集
print(s2 <= s1)
print(s2.issubset(s1))
# 判断是否有共同部分,有False,没有true
print(s1.isdisjoint(s2))
View Code

 2)集合的方法

update          是否更新原数据
add             添加元素
discard         删除元素,没有返回值,不存在不报错
remove          删除元素,没有返回值,不存在报错
pop             随机删除,有返回值
clear           清空集合                  
s1 = {'a','b','c'}
s2 = {'b','d','f'}
s1.difference_update(s2)    # 差集的结果赋值给了s1
print(s1)
s1 = {'a','b','c'}
s1.add('d')
print(s1)
s1.discard('aaa')   # 删除,没有返回值,不存在不报错
print(s1)

s1.pop()    # 删除,随机删除,有返回值
s1.remove('d')  # 删除,没有返回值,不存在报错
print(s1)

s1 = {'a','b','c'}
s2 = {'b','d','f'}
s1.update({3,4,5})
print(s1)
# 了解的内容
# s1.clear()
# s1.isdisjoint()
# s1.issubset()
# s1.issuperset()

# 例题,去除下面的重复的内容
names = ['user','sbsb','Lina','Lina','user']
print(list(set(names)))
#小结:用集合去重,局限性很强
# 1、不能保证原数据类型的顺序
# 2、原数据中包含的元素必须全部为不可变类型
View Code

 3)集合的特征

1、不可变类型
2、元素不能重复
3、无序

4)例题,去除下面列表重复的内容

l=[
    {'name':'egon','age':18,'sex':'male'}, 
    {'name':'alex','age':73,'sex':'male'},
    {'name':'egon','age':20,'sex':'female'},
    {'name':'egon','age':18,'sex':'male'},
    {'name':'egon','age':18,'sex':'male'},
]
l=[
    {'name':'egon','age':18,'sex':'male'},
    {'name':'alex','age':73,'sex':'male'},
    {'name':'egon','age':20,'sex':'female'},
    {'name':'egon','age':18,'sex':'male'},
    {'name':'egon','age':18,'sex':'male'},
]
# 版本一
# s = set()
# new_l = []
# for d in l:
#     values = (d['name'],d['age'],d['sex'])
#     #print(values)
#     if values not in s:
#         s.add(values)
#         new_l.append(d)
# print(new_l)

# 版本二
# s = []
# new_l = []
# for d in l:
#     if d not in s:
#         s.append(d)
#         new_l.append(d)
# print(new_l)
# 版本三
s = []
for d in l:
    if d not in s:
        s.append(d)
print(s)
示例

5)集合常用操作归纳 set 类型

    - set1 = set({1, 2, 'barry'}) # 创建集合
    - set2 = {1, 2, 'barry'}      # 创建集合
    - add  # 将元素添加到集合中。如果元素已经存在,这不起作用。
    - del set1  # 删除集合- update # 迭代增加
    - clear  # 删除此集合中的所有元素
    - remove # 删除一个元素
    - pop    # 随机删除一个元素
    - issubset    # 子集
    - issuperset  # 超集
    - union  # 并集。(| 或者 union)
    - difference # 差集。(- 或者 difference)
    - intersection  # 交集。(&  或者 intersection)
    - isdisjoint    # 如果两个集合有一个空交点,则返回True
    - intersection_update  # 用它自己和另一个交集更新一个集合。
    - difference_update  # 删除另一个集合中本集合所拥有的所有元素
    - symmetric_difference  # 反交集。 (^ 或者 symmetric_difference)

三、字符编码

四、文件操作

1)文件操作的关键字 open

f=open(r'D:oldboyedumanth-01day3a.txt',mode='r',encoding='utf-8')  # 需要转义,前面需要加 r
date = f.read()
print(date)
f.close()   # 回收操作系统打开的文件

 对一个文件操作,结束时,需要close。但这样往往会忘记写。即用下面个方法

with open(r'D:oldboyedumanth-01day3a.txt',mode='r',encoding='utf-8') as f:
    data = f.read()
    print(data)
with open('a.txt',mode='r',encoding='utf-8') as f,
    open('set1.py',mode='r',encoding='utf-8') as f1:
    data = f.read()
    print(data)

2)文件的读模式 r 

with open('a.txt',mode='r',encoding='utf-8') as f:
    # print('第一次
',f.read())     # read一次性把文件读取完,指针已经指向了文件末尾
    # print('第二次', f.read())

    # print(f.readline(),end='')   # 一行一行的读取
    # print(f.readline(),end='')

    for line in f:
        print(line,end='')

    # print(f.readlines())    #读取一行,变成列表  ['你好
', '哈哈哈给
', '好的啊']
View Code

3)文件的写模式 w

# w 模式
# 1、文件存在,则清空
# 2、文件不存在,则创建
with open('b.txt',mode='w',encoding='utf-8') as f:
    # f.write('你好啊,张山
')
    # f.write('你好啊,SB
')

    info = ['你好啊,张山
','你好啊,SB
','圆润的走开,SB
']
    # for line in info:
    #     f.write(line)
    f.writelines(info)
    f.write('a
b
c
')
View Code

4)只追加写模式  a

# a : 只追加写模式,
# 1、文件不存在如果不存在则创建
# 2、文件存在,指针直接移动到文件末尾
with open('b.txt',mode='a',encoding='utf-8') as f:
    f.write('55555
')
    f.write('494
')
View Code

5)控制文件读写单位的2种模式

1、t : 默认的模式,也就被省略了。 但局限性强,只能用于文本文件,像图片,视频,就无法改模式
2、b : 二进制模式,该模式下读写但都是bytes。该模式下不能指定encoding参数
二进制读取图片,视频
二进制读取图片,视频
with open('1.jpg',mode='rb') as f:
    a = f.read()
    print(a)

# 二进制读取文本文件,解码获取显示内容
with open('a.txt',mode='rb') as f:
    a = f.read()
    print(a)
    print(a.decode('utf-8'))
View Code
二进制写入文本文件需要编码存入文本文件
with open('a.txt',mode='wb') as f:
    f.write('你好aagagagagwg啊sb
'.encode('utf-8'))
    f.write('你才wwwwwwsb
'.encode('utf-8'))
View Code

6)复制文件

import sys,os
# print(sys.argv)
src_file_path = sys.argv[1]
if not os.path.isfile(src_file_path):
    print('文件不存在')
    sys.exit()
dst_file_path = sys.argv[2]

with open(r'%s' %src_file_path,'rb') as read_f,
    open(r'%s' %dst_file_path,'wb') as write_f:
    for line in read_f:
        write_f.write(line)
View Code

7)文件内容修改

# 第一种覆盖写
# with open('a.txt','rt+',encoding='utf-8') as f:
#     f.seek(6)   # 移动的单位是字节
#     f.write('[你是逗比]')   # 覆盖写

# 第二种,读取文件的内容,修改字符串。第二次打开,以被赋值的字符串写入
# 缺陷,文件过大,机器卡死

# with open('a.txt','r',encoding='utf-8') as f:
#     data = f.read()
#     print(data)
#     data=data.replace('武大郎','张全蛋')
#     print(data)
# with open('a.txt','w',encoding='utf-8') as f:
#     f.write(data)

# 第二种,一行一行的写入新文件,删除旧文件,重命名新文件
import os
with open('b.txt','r',encoding='utf-8') as f,
    open('a.txt.swap','w',encoding='utf=8') as f_new:
    for line in f:
        if '武藤兰' in line:
            line = line.replace('张全蛋','李狗蛋')
        f_new.write(line)
os.remove('b.txt')
os.rename('a.txt.swap','b.txt')
View Code

 8)大文本读取方式

with open('Dockerfile',mode='r',encoding='utf-8') as f:
    f.tell()
    f.read(50)
    for line in f:
        mylen = len(line.encode('utf-8'))
        line = line.strip()
        print(line)

原文地址:https://www.cnblogs.com/linu/p/8849413.html