欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python Day02

程序员文章站 2022-03-01 20:49:27
...

一、模块初识

模块:库

分类:

  • 标准库:不需要安装,直接导入的库
  • 第三方库:需要下载安装

1、sys模块

# sys模块
import sys
print(sys.path) # 打印环境变量
print(sys.argv) # 打印路径

2、os模块

# os模块
import os
dir = os.system("pwd") # 调用shell
print(dir) # os.system()调用完直接输出,然后返回执行结果状态码(只执行不保存)
dir2 = os.popen("pwd").read() # 调用完不输出,返回结果地址,用read()方法读取结果
print(dir2)
os.mkdir("new dir") # 创建单级目录
os.makedirs("new dirs/dir") # 创建多级目录

二、*.pyc 文件

PyCodeObject和pyc文件:

PyCodeObject是Python编译器真正编译成的结果。

  • 当python程序运行时,编译的结果保存在位于内存中的PyCodeObject中,当Python程序运行结束时,Python解释器则将PyCodeObject写回到pyc文件中。

  • 当python程序第二次运行时,首先程序会在硬盘中寻找pyc文件,如果找到,则直接载入,否则就重复上面的过程。

pyc文件是PyCodeObject的一种持久化保存方式。


三、数据类型

1、标准数据类型
Python 3 中有六个标准的数据类型:

  • Number(数字)
  • String(字符串)
  • List(列表)
  • Tuple(元组)
  • Sets(集合)
  • Dictionary(字典)

数据类型查看: type()

a, b, c, d = 20, 5.5, True, 4+3j
print(type(a), type(b), type(c), type(d))

输出:

<class 'int'> <class 'float'> <class 'bool'> <class 'complex'>

数据类型判断:isinstance(变量, 数据类型)

a = 111
isinstance(a, int)

输出:

True

2、Number(数字)

  • int
  • float
  • bool
  • complex

在Python 3里,只有一种整数类型 int,表示为长整型,没有 python2 中的 Long。

3、String(字符串)
①表示:用单引号(‘)或双引号(“)括起来,同时使用反斜杠()转义特殊字符。
②截取:字符串的截取的语法格式如下:

变量[头下标:尾下标]
  • 索引值以 0 为开始值,-1 为从末尾的开始位置。
  • 加号 (+) 是字符串的连接符
  • 星号 (*) 表示复制当前字符串,紧跟的数字为复制的次数。

例如:

str = 'Tianyaguxiang'
print (str)          # 输出字符串
print (str[0:-1])    # 输出第一个到倒数第二个的所有字符
print (str[0])       # 输出字符串第一个字符
print (str[2:5])     # 输出从第三个开始到第五个的字符
print (str[2:])      # 输出从第三个开始的后的所有字符
print (str * 2)      # 输出字符串两次
print (str + "TEST") # 连接字符串

运行结果:
Python Day02
③解码与编码

# 编码与解码
str = "我爱北京*"
print(str)
print(str.encode())
print(str.encode(encoding="utf-8"))
print(str.encode(encoding="gbk"))
print(str.encode(encoding="gbk").decode(encoding="gbk"))

Python Day02


四、列表

1、定义列表

  • 使用“ [] ”定义
names = ["天涯","古巷","地角","新街"]

2、列表的操作

  • 切片
names = ["Alex","Tenglan","Eric","Rain","Tom","Amy"]
names[1:4]  #取下标1至下标4之间的数字,包括1,不包括4
['Tenglan', 'Eric', 'Rain']
>>> names[1:-1] #取下标1至-1的值,不包括-1
['Tenglan', 'Eric', 'Rain', 'Tom']
>>> names[0:3] 
['Alex', 'Tenglan', 'Eric']
>>> names[:3] #如果是从头开始取,0可以忽略,跟上句效果一样
['Alex', 'Tenglan', 'Eric']
>>> names[3:] #如果想取最后一个,必须不能写-1,只能这么写
['Rain', 'Tom', 'Amy'] 
>>> names[3:-1] #这样-1就不会被包含了
['Rain', 'Tom']
>>> names[0::2] #后面的2是代表,每隔一个元素,就取一个
['Alex', 'Eric', 'Tom'] 
>>> names[::2] #和上句效果一样
['Alex', 'Eric', 'Tom']
  • 追加:使用append函数
>>> names
['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy']
>>> names.append("我是新来的")
>>> names
['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy', '我是新来的']
  • 插入:使用insert函数(插入的位置,插入的内容)
>>> names
['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy', '我是新来的']
>>> names.insert(2,"强行从Eric前面插入")
>>> names
['Alex', 'Tenglan', '强行从Eric前面插入', 'Eric', 'Rain', 'Tom', 'Amy', '我是新来的']
>>> names.insert(5,"从Eric后面插入试试新姿势")
>>> names
['Alex', 'Tenglan', '强行从Eric前面插入', 'Eric', 'Rain', '从Eric后面插入试试新姿势', 'Tom', 'Amy', '我是新来的']
  • 修改:
>>> names
['Alex', 'Tenglan', '强行从Eric前面插入', 'Eric', 'Rain', '从eric后面插入试试新姿势', 'Tom', 'Amy', '我是新来的']
>>> names[2] = "该换人了"
>>> names
['Alex', 'Tenglan', '该换人了', 'Eric', 'Rain', '从eric后面插入试试新姿势', 'Tom', 'Amy', '我是新来的']
  • 删除
    ①使用 del 删除
    ②使用 remove 删除指定元素
    ③使用 pop 删除最后一个
    ④使用 clear 清空整个列表
>>> del names[2] 
>>> names
['Alex', 'Tenglan', 'Eric', 'Rain', '从eric后面插入试试新姿势', 'Tom', 'Amy', '我是新来的']
>>> del names[4]
>>> names
['Alex', 'Tenglan', 'Eric', 'Rain', 'Tom', 'Amy', '我是新来的']
>>> 
>>> names.remove("Eric") #删除指定元素
>>> names
['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy', '我是新来的']
>>> names.pop() #删除列表最后一个值 
>>> names
['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy']
>>> names.clear() #清空整个列表
>>> names
[]
  • 扩展(列表合并):使用extend函数
>>> names
['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy']
>>> b = [1,2,3]
>>> names.extend(b)
>>> names
['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy', 1, 2, 3]
  • 拷贝:使用copy()函数
>>> names
['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy', 1, 2, 3]
>>> name_copy = names.copy()
>>> name_copy
['Alex', 'Tenglan', 'Rain', 'Tom', 'Amy', 1, 2, 3]

注意:该copy为浅copy,即在列表里面还有子列表的时候,修改子列表的内容,副本也随之变化。同理,改副本里子列表的内容,names也会发生改变。

原理:copy复制的地址,如:

names = ["天涯",["张三","李四"],"地角","新街"]
names2 = names.copy()
print(names)
print(names2)
names[0] = "古巷"
names[1][0] = "王五"
print(names)
print(names2)

输出结果为:
Python Day02
如果想要深拷贝,即副本与原身完全独立,则需要import copy使用copy包的deepcopy()

#深拷贝
import copy
names = ["天涯",["张三","李四"],"地角","新街"]
names2 = copy.deepcopy(names) #若调用copy.copy()则为浅copy
print(names)
print(names2)
names[0] = "古巷"
names[1][0] = "王五"
print(names)
print(names2)

输出结果为:
Python Day02

  • 统计:使用count()函数
>>> names
['Alex', 'Tenglan', 'Amy', 'Tom', 'Amy', 1, 2, 3]
>>> names.count("Amy")
2
  • 排序:sort()
>>> names
['Alex', 'Tenglan', 'Amy', 'Tom', 'Amy', 1, 2, 3]
>>> names.sort() #排序
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unorderable types: int() < str()   #3.0里不同数据类型不能放在一起排序了,擦
>>> names[-3] = '1'
>>> names[-2] = '2'
>>> names[-1] = '3'
>>> names
['Alex', 'Amy', 'Amy', 'Tenglan', 'Tom', '1', '2', '3']
>>> names.sort()
>>> names
['1', '2', '3', 'Alex', 'Amy', 'Amy', 'Tenglan', 'Tom']
  • 反转:reverse()
>>> names.reverse() #反转
>>> names
['Tom', 'Tenglan', 'Amy', 'Amy', 'Alex', '3', '2', '1']
  • 获取下标:index()返回找到的第一个元素的下标
>>> names
['Tom', 'Tenglan', 'Amy', 'Amy', 'Alex', '3', '2', '1']
>>> names.index("Amy")
2 #只返回找到的第一个下标

3、浅拷贝与深拷贝

  • 浅拷贝:对指针的拷贝,拷贝后两个指针指向同一个内存空间
 # 浅拷贝的三种实现方式
 person = ['name',['saving',2000]]
 # 方式一:copy方法
 p1 = copy.cpoy(person)
 # 方式二:直接赋值
 p2 = person[:]  #注person[:]即person[0:-1]的简写
 # 方式三:list()
 p3 = list(person)

使用场景:夫妻有共同存款

person = ['name',['saving',2000]]
p1 = person[:]
p2 = person[:]
p1[0] = '张三'
p2[0] = '小花'
# 这样修改存款2000时,夫妻的共同存款都一起发生变化
p1[1][1]=2500
  • 深拷贝:不但对指针进行拷贝,而且对指针指向的内容进行拷贝,经深拷贝后的指针是指向两个不同地址的指针。

五、元组

1、定义元组

  • 使用“ () ”定义
names = "天涯","古巷","地角","新街"

元组其实跟列表差不多,只是它一旦创建,便不能再修改,所以又叫只读列表

2、元组的操作(只有两个方法)

  • count()

  • index()


六、字符串操作

1、首字母转大写: capitalize()

name = "flavioy"
print(name.capitalize())

输出:

Flavioy

2、统计字符串出现个数:count()

print("Hello Hello Hello world".count('Hello'))

输出:

3

3、使用字符填充字符串,并将其居中:center()

print("flavioy".center(50,'*'))

输出:

****************flavioy*****************

4、判读是否以指定字符串结尾:endswith()

print("my name is flavioy".endswith('flavioy'))

输出:

True

5、更改tab键为指定长度的空格:expandtabs()

print('name \t class tel'.expandtabs(tabsize=30))

输出:

Python Day02

6、查找指定字符串所在的第一个位置:find(),rfind()

str = 'your system is crash'
#从左查找最左边第一个位置
print(str.find('s'))
#从左查找最右边第一个位置
print(str.rfind('s'))

输出:

5
18

7、格式化输出:format()

info = "my name is {name} and I'm {age} years old"
print(info.format(name='Yao',age=22))
print(info.format_map({'name':'Yao','age':'23'}))

输出:

my name is Yao and I’m 22 years old
my name is Yao and I’m 23 years old

8、判断是否只包含a-z,0-9:isalnum()

print('132sfa'.isalnum())
print('[email protected]'.isalnum())

输出:

True
False

9、判断是否只包含纯英文字符:isalpha()

print('Ajasbd2'.isalpha())
print('AjasbdM'.isalpha())

输出:

False
True

10、判断是否只包含十进制字符:isdecimal()

注意:定义一个十进制字符串,只需要在字符串前添加 ‘u’ 前缀即可。
str1 = u"this2018"
print(str1.isdecimal())
str2 = u"23443434"
print(str2.isdecimal())

输出:

False
True

11、判断是否为整数:isdigit()

print('8848'.isdigit())

输出:

True

12、判断是否为全小写:islower()

print('Python'.islower())
print('python'.islower())

输出:

False
True

13、判断是否只由数字组成:isnumeric()

print('3.14'.isnumeric())

输出:

False

14、判断是否是为标题格式(每个单词首字母是否都大写):istitle()

print('My name is Yao'.istitle())
print('My Name Is Yao'.istitle())
print('Book of Moon'.istitle())

输出:

False
True
False

15、判断是否为全大写:isupper()

print('ABc'.isupper())

输出:

False

16、列表转为字符串:join()

print('='.join(['hello','world']))
print(''.join(['hello','world']))
print(','.join(['hello','world']))

输出:

hello=world
helloworld
hello,world

17、使用指定字符补长字符串:ljust(),ljust()

str = 'hello world'
#往左填充
print(str.ljust(50,'*'))
#往右填充
print(str.rjust(50,'*'))

输出:

hello world***************************************
***************************************hello world

18、大小写转化:lower(),upper(),swapcase()

#大写转小写
print('ABhasdC'.lower())
#小写转大写
print('ABhasdC'.upper())
#大小写互相转化
print('ABhasdC'.swapcase())

输出:

abhasdc
ABHASDC
abHASDc

19、去除空格与回车:strip(),lstrip(),rstrip()

# strip去除两边
# lstrip去除左边
# rstrip去除右边
str = '\n  Hello World  \n'
print(str.strip())
print("-------")
print(str.lstrip())
print("-------")
print(str.rstrip())
print("-------")

输出:

Hello World
-------
Hello World  

-------

  Hello World
-------

20、翻译:maketrans(),translate()

grammar = str.maketrans('abcdef','123456')
print('ice is awesome'.translate(grammar))

输出:

i35 is 1w5som5

21、替换:replace()

str = "Hello Hello Hello world"
print(str.replace('Hello','hi'))
print(str.replace('Hello','hi',2))

输出:

hi hi hi world
hi hi Hello world

22、字符串转列表:split(),splitlines()

str = 'my name is Yao'
print(str.split())
print('1+2+3+4+5'.split('+'))
print('1+2\n3+4+5'.splitlines())

输出:

[‘my’, ‘name’, ‘is’, ‘Yao’]
[‘1’, ‘2’, ‘3’, ‘4’, ‘5’]
[‘1+2’, ‘3+4+5’]

23、转化为标题格式:title()

print('my name is Yao'.title())

输出:

My Name Is Yao


七、字典

1、定义

info = {
    'stu1101': "TengLan Wu",
    'stu1102': "LongZe Luola",
    'stu1103': "XiaoZe Maliya",
}

2、字典的特性:

  • 字典是无序的
  • key必须是唯一的,so 天生去重

3、增加

info["stu1104"] = "苍井空"
print(info)

输出:

{‘stu1102’: ‘LongZe Luola’, ‘stu1104’: ‘苍井空’, ‘stu1103’: ‘XiaoZe Maliya’, ‘stu1101’: ‘TengLan Wu’}

4、修改

 info['stu1101'] = "武藤兰"
 print(info)

输出:

{‘stu1102’: ‘LongZe Luola’, ‘stu1103’: ‘XiaoZe Maliya’, ‘stu1101’: ‘武藤兰’}

5、删除

info = {
    'stu001': '苍井空',
    'stu002': 'LongZe LuoLa',
    'stu003': 'XiaoZe MaLiYa',
    'stu004': '胡桃雏'
}

#方法一:标准删除 pop()
info.pop("stu001") 
#方法二:del删除
del info['stu003']
#方法三:随机删除一个 popitem()
info.popitem()

print(info)

输出:

{‘stu002’: ‘LongZe LuoLa’}

6、查找

info = {'stu1102': 'LongZe Luola', 'stu1103': 'XiaoZe Maliya'}

#方法一:标准查找in(判断是否存在该key)
"stu1102" in info
#方法二:获取get()
info.get("stu1102")
info.get("stu1104")
#方法三:key直接获取
info["stu1102"]
info["stu1105"]

输出:

True
‘LongZe Luola’
None
‘LongZe Luola’
Traceback (most recent call last):
File “”, line 1, in
KeyError: ‘stu1105’

注意:如果一个key不存在,通过key做下标直接获取就会报错,而get不会,不存在只返回None

7、多级字典嵌套及操作

av_catalog = {
    "欧美":{
        "www.youporn.com": ["很多免费的,世界最大的","质量一般"],
        "www.pornhub.com": ["很多免费的,也很大","质量比yourporn高点"],
        "letmedothistoyou.com": ["多是自拍,高质量图片很多","资源不多,更新慢"],
        "x-art.com":["质量很高,真的很高","全部收费,屌比请绕过"]
    },
    "日韩":{
        "tokyo-hot":["质量怎样不清楚,个人已经不喜欢日韩范了","听说是收费的"]
    },
    "大陆":{
        "1024":["全部免费,真好,好人一生平安","服务器在国外,慢"]
    }
}

av_catalog["大陆"]["1024"][1] += ",可以用爬虫爬下来"
print(av_catalog["大陆"]["1024"])

输出:

[‘全部免费,真好,好人一生平安’, ‘服务器在国外,慢,可以用爬虫爬下来’]

8、其他方法

  • 打印字典所有的values:values()
info.values()

dict_values([‘LongZe Luola’, ‘XiaoZe Maliya’])

  • 打印字典所有的keys:keys()
info.keys()

dict_keys([‘stu1102’, ‘stu1103’])

  • 给字典的key设置默认值(若已有默认值则无变化,若无默认值则添加):setdefault()
info = {
    'stu1102': 'LongZe Luola',
    'stu1103': 'XiaoZe Maliya', 
}
info.setdefault("stu1106","Cang JingKong")
info.setdefault("stu1102","龙泽萝拉")
print(info)

{‘stu1102’: ‘LongZe Luola’, ‘stu1103’: ‘XiaoZe Maliya’, ‘stu1106’: ‘Cang JingKong’}

  • 按一个字典更新另一个字典:update()
info = {
     'stu1102': 'LongZe Luola',
     'stu1103': 'XiaoZe Maliya',
     'stu1106': 'Cang JingKong'
}
b = {1:2,3:4, "stu1102":"龙泽萝拉"}
info.update(b)
print(info)

{‘stu1102’: ‘龙泽萝拉’, 1: 2, 3: 4, ‘stu1103’: ‘XiaoZe Maliya’, ‘stu1106’: ‘Cang JingKong’}

  • 将字典转化为元组:items()
print(info.items())

dict_items([(‘stu1102’, ‘龙泽萝拉’), (1, 2), (3, 4), (‘stu1103’, ‘XiaoZe Maliya’), (‘stu1106’, ‘Alex’)])

9、字典遍历

#方法1
for key in info:
    print(key,info[key])

#方法2
for k,v in info.items(): #会先把dict转成list,数据里大时莫用
    print(k,v)