目录
0、pycharm快捷键
1、输入
2、输出
3、标准数据类型
4、运算符
5、顺序、选择、循环结构
6、列表list
7、字典dict{a:b}
7、集合set{1,2,3,4}
8、元组 tuple(),无法修改
9、赋值、浅拷贝和深拷贝
10、函数
11、filter和map方法
12、装饰器
13、模块
14、面向对象基础
15、文件操作
16、正则表达式
17、python操作word、Excel、ppt、pdf文件
0、pycharm快捷键
注释代码 Ctrl+/
复制行 Ctrl+ d
全局搜索:敲两下Shift
移动行 shift+alt+上/下
1、输入
int(input(“请输入数据:”))
2、输出
print("xxx")
def print(self, *args, sep=' ', end='\n', file=None): # known special case of print
"""
print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
Prints the values to a stream, or to sys.stdout by default.
Optional keyword arguments:
file: a file-like object (stream); defaults to the current sys.stdout.
sep: string inserted between values, default a space.
end: string appended after the last value, default a newline.
flush: whether to forcibly flush the stream.
"""
3、标准数据类型
Python3 中有六个标准的数据类型:
- Number(数字)
- String(字符串)' '
- List(列表)[]
- Tuple(元组)() 元组不可修改
- Set(集合){}无序,每一次输出都随机,无重复元素,无法通过下标访问修改
- Dictionary(字典){}
Python3 的六个标准数据类型中:
- 不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);
- 可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。
4、运算符
Python 语言支持以下类型的运算符:
- 算术运算符
- 比较(关系)运算符
- 赋值运算符
- 逻辑运算符
- 位运算符
- 成员运算符
- 身份运算符
- 运算符优先级
5、顺序、选择、循环结构
class Person:
def __init__(self):
self.result = 1
# 说白了就是类中一个特殊方法,类对象可以像字典对象那样根据key取值(dict['key']),
# 如类对象Object['key'],系统会自动调用__getitem__方法
# (所以你在看pytorch里面Dataloader的时候没有发现主函数直接调用__getitem__,原来是系统自动调用),
# 然后返回该方法定义return值,说到这里,有一点需要强调哦, 字典取值时key不存在,会抛出异常,
# 而类对象的key是否存在,都会调用__getitem__方法并返回其规定的值
def __getitem__(self, item):
self.result += 1
if self.result >= 6:
raise StopIteration('停止遍历') # 给出警告
return self.result
p = Person()
for i in p:
print(i)
6、列表list
list1 = ['兰博基尼', '坦克300', True, False, 666]
for i in list1:
print(i)
# 列表添加元素
list1.append('秦始皇')
list1.extend(['康熙', '乾隆']) # 不会改变维度,追加一个元素,extend会进行拆分
list1.insert(1, '曹操')
print(list1)
# 删除元素
list2 = ['西游记', '三国演义', '红楼梦', '水浒传']
list2.pop()
list2.remove('红楼梦')
list2.clear() # 清空列表
# 列表元素的排序
list3 = [5, 1, 2, 8, 3, 19]
list3.sort() # 默认升序 reverse=True是降序
list4 = sorted(list3, reverse=True) # 新列表 key=len按长度排序
list4.reverse()
len(list4)
print(max(list4))
print(list4.index(5))
print(list4)
# 列表生成式
list5 = []
for i in range(1, 6):
list5.append(i**2)
print(list5)
list6 = [i**2 for i in range(1, 6)]
list7 = [i for i in range(1, 11) if i % 2 == 1]
print(list6)
print(list7)
7、字典dict{a:b}
dict1 = {'name': '张三', 'age': 18, 'sex': 1, 'school': 'wit'}
print(dict1)
# 访问元素
print(dict1['name'])
print(dict1.get('name'))
# 删除元素
dict1.pop('age')
dict1.popitem() # 删除最后一个
# 清空
dict1.clear()
# 获取长度、keys、values
# 遍历
'''
普通遍历的是keys
values
enumerate
items
'''
for item in range dict1.items():
print(item)
# 合并字典 update
7、集合set{1,2,3,4}
set1 = {2, 23, 45, 999, True}
print(set1)
# 长度
len(set1)
# 添加元素
set1.add(46)
set1.update([1, 2, 3])
# 删除元素
set1.pop() # 随机删除
set1.remove(2) # 会报错
set1.discard(99)
# 清空集合
set1.clear()
# 遍历集合
for i in set1:
print(i)
8、元组 tuple(),无法修改
与列表相似,但是无法修改
tup = (1, 2, 3, 4, True, '宝宝')
# 访问
# 切片
# 长度len(tup)
# 获取max() min()
# 其他数据类型转化为元组
list1 = [1,2,3]
tuple(list1)
print(type(list1))
9、赋值、浅拷贝和深拷贝
赋值:其实就是对象的引用(取别名)
import copy
list1 = [1, 2, 3, '张三']
# 浅拷贝
list2 = list1.copy()
print(list1, list2)
list1[2] = '李四'
print(list1, list2)
# 深拷贝 用于多维列表
list3 = [1, 2, 3, ['老师', '学生'], 222]
list2 = copy.deepcopy(list3)
10、函数
目的:重复的代码,便于程序维护
函数定义、for、while循环、if语句要加冒号:
def test():
for i in range(1, 11):
if i % 2 == 0:
print(i)
test()
# 函数可以赋值给其他变量
demo = test
demo()
# 不定长参数
# *args:用来接收多个位置参数,得到是元组,一般放在最后
def demo(name, *args):
print('my name is %s,my cars are %s' % (name, args))
demo('张三', '兰博基尼', '大奔')
# **kwargs:用来接收多个关键字参数(key word),得到是字典
def func(name, **kwargs):
print(name, kwargs)
func('李四', age = 12,money = '1w',say = 'hello')
# 函数的返回值
def func1():
return '我是返回值', '李四'
print(func1())
# 函数可以嵌套,也可以调用后面的函数
# 匿名函数
num1 = lambda num: num ** 2
print(num1(3))
# 回调函数
def add(x,y):
return x + y
def cha(a,b):
return a - b
def cheng(a,b):
return a * b
def chu(a,b):
return a / b
def function(a,b,fun):
return fun(a,b)
print('a,b之和为', function(2,3,cheng))
# 闭包函数:外部函数的返回值的内部函数
def outer():
def inner():
print('我是闭包函数')
return inner # 这里返回的是函数体,不是函数的调用
fn = outer() # fn等价于inner
fn() # fn()等价于inner()
11、filter和map方法
# filter 筛选,返回值是filter对象
age = [12, 18, 20, 31, 35, 56, 78]
list1 = filter(lambda ele: ele>30, age)
print(list1)
print(list(list1))
# map 适合把每个数据进行操作
list2 = map(lambda ele: ele + 3, age)
print(list(list2))
12、装饰器
# def test():
# print('你好吗?')
"""
test = outer(test)
test()
"""
# 装饰器简洁写法
# 定义装饰器函数
def outer(fn): # fn是原函数
def inner():
fn() # 原函数
print('我很好!') # 新增功能
return inner
@outer # 等价于test = outer(test)
def test(): # 原函数必须在装饰器的下面
print('你好吗?')
test()
# 装饰器的其他用法
# 多个装饰器修饰一个函数:遵循就近原则
13、模块
# 目的:为了方便快速开发
# 五种引用模块的方法
# 法一
import time
start = time.time()
# time.sleep(2.5)
end = time.time()
# print(end - start)
# 法二
from random import randint
print(randint(1, 2))
# 法三
from random import *
# 法四:起别名
import datetime as dt
print(dt.time())
# 法五 给方法取别名
from copy import deepcopy as dp
# 常见模块
# math数学操作
# os操作文件
# random 生成随机数
# datetime 显示日期时间
import datetime
print(datetime.datetime.now())
# time 操作时间,控制时间
# pip工具,是用来安装和卸载python的扩展的工具
# 豆瓣镜像地址:https://pypi.douban/simple/
# 在终端输入 pip install numpy -i https://pypi.douban/simple/
# pip show numpy 查看扩展
# 自定义模块(模块本质就是py文件)
import my_module
my_module.test()
14、面向对象基础
# 定义类(封装person的各种属性和方法)
class Person():
# 属性
name = '张三'
age = 18
# 方法
def eat(self):
print('我在吃饭')
def say(self):
print('我在说话')
jack = Person() # self 表示的是jack对象
jack.say()
# 构造函数和析构函数
"""
统称魔术方法
会在合适的时机自动触发
必须以__开始和__结束
主要用于数据库的连接或者关闭或者文件的保存
"""
class Animal():
"""
# 类属性
name = '小白'
age = 1
"""
# 构造函数:创建对象赋值之后,自动触发
def __init__(self, name, age):
self.name = name
self.age = 1
print(f'我叫{self.name}, 今年{self.age}岁了')
# 析构函数:时机:对象被销毁或者程序执行完毕
def __del__(self):
print('我是析构函数')
dog = Animal('小白', 1)
print('hello world!')
# 类属性和对象属性
'''
类不能访问对象的属性,类改类,对象改对象
'''
# 继承
# 构造函数的继承
# 隐式继承:super()
class Person():
def __init__(self, name):
self.name = name
def say(self):
print('人在说话')
class Boy(Person):
def __init__(self, name, sex, weight):
Person.__init__(self, name)
self.sex = sex
self.weight = weight
def eat(self):
print('boy在吃饭')
XiaoMing = Boy('jack',1,120)
XiaoMing.say()
XiaoMing.eat()
# 类方法
# 静态方法
class Student:
name = 'jack'
@classmethod
def eat(cls):
print('i am eating')
@staticmethod
def run():
print('i am running')
# 定义私有属性
__age = '25'
# 定义私有方法:用于类的内部使用,在外部没有用
def __kiss(self):
pass
xiaoZhang = Student()
xiaoZhang.age # 类外部无法访问私有属性
# 多态(通过重写/重载父类的方法)
# 父类的引用指向子类的对象
15、文件操作
# open(file,mode,encoding)打开文件,返回打开后的这个文件对象
"""
file 文件所在路径
mode 打开文件的模式 不写就默认r(read)(w write写 a append追加内容)
encoding 编码格式,windows默认gck编码格式,demo.txt写入时是utf-8格式
"""
file = open('demo.txt', encoding='utf-8')
# file.read()读取内容,读取和写入要用相同的编码格式
print(file.read())
# 关闭文件资源
file.close()
"""
文件路径分为:
绝对路径 从c盘开始找 C:/PycharmProjects/code/demo.txt \是转义字符
相对路径 从当前文件开始找 . 表示当前目录,可以省略不写 ..表示上一级目录 ../../上上级目录
"""
file1 = open('C:/PycharmProjects/code/demo.txt', encoding='utf-8')
print(file1.read())
# 写入文件,如果文件不存在则直接创建一个文件
file2 = open('./cc.txt', 'w', encoding='utf-8')
file2.write('hello world!')
# 刷新管道缓冲区
file2.flush()
file2.close()
16、正则表达式
"""
正则表达式:是一个特殊的字符序列,用于检索,替换符合某个模式的文本
可以爬虫,验证手机号码,身份证号邮箱是否合法,数据分析,用简单的方式实现复杂控制,减少代码量
re.match(pattern, string, flags=0)
pattern模式
# pattern匹配单个字符规则:
\d 表示一个数字,0-9的任意数字。等价于[0-9],
\D 匹配非数字字符,等价于[^0-9]
\w 匹配数字、字母、下划线,等价于[0-9a-zA-Z_]
\W 上面的取反
\s 匹配任意的空白字符(空格 回车 制表符 换页),等价于[\r \n \t \f]
\S 取反
[] 表示匹配括号内的一位
- 表示一个区间
. 表示非换行符就行
+ 可以出现1池或者多次
# 匹配多个字符规则:
g?l 匹配g单个字符出现次数,只能匹配0次或者1次
re.search('goog?le', 'goole') #l前面出现0次g
string要验证的字符串
+ 表示前面字符可以出现1次或者多次
* 表示前面字符可以出现0次或者多次
g{3} g只能出现三次
{3-6} 出现3-6次
# 边界字符
^x 以x开始
d$ 以d结尾
^文本$ 完全匹配(一模一样)
\ 转义字符
flags标志位(可选参数) 用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等
re.S 使.匹配到\n
re.I 忽略大小写
"""
import re
print(re.search('hel\dlo','hel6lo world'))
# 引入
result = re.search("^1\d{10}$", "02345678911") # 以1开头,0-9之间的任意数字,10位,$匹配文本的结束
if result:
print("手机号码合法")
else:
print("手机号不合法")
# re.match() 从开头开始验证返回的是对象,或者None
'''
re.match(pattern, string, flags=0)
pattern模式
string要验证的字符串
flags标志位 用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等
'''
# re.search() 返回对象,匹配字符串整个是否包含指定的内容
"""
re.search()匹配整个字符串,直到找到一个匹配。
"""
# re.split()拆分
print(re.split('\d', 'hello123world1234abc'))
# re.sub()替换
str1 = '今天 天气 很晴朗'
print(re.sub('\s+','...',str1))
# 匹配中文
chinese = "[\u4e00-\u9faa5]+"
print(re.search(chinese,'hello 光头陈 world'))
17、python操作word、Excel、ppt、pdf文件
"""
python 操作Excel文件
老版本2007以前(xls格式) 用第三方库xlrd xlwt 以及工具模块xlutils
pip install xlwt xlrd xlutils
新版本 (xlsx和XML)openpyxl
"""
import xlrd, xlwt
import random
'''
# 读取Excel文件
# 打开工作簿
wb = xlrd.open_workbook('./data/2022年长春工程学院(市政工程)方向复试情况汇总表(20220410).xls')
# 获取工作表名称
sheetnames = wb.sheet_names()
# 通过工作表名称获取工作表对象
sheet = wb.sheet_by_name(sheetnames[0])
print(sheetnames)
# 获取工作表的行数和列数
print(sheet.nrows, sheet.ncols)
# 打印工作表中数据
for row in range(sheet.nrows):
for col in range(sheet.ncols):
value = sheet.cell(row, col).value # 获取数据单元格数据
print(value, end='\t')
print()
'''
# 写入Excel文件,五个学生,三门课程,将分数写入Excel文件
student_names = ['刘备', '张飞', '关羽', '黄忠', '赵子龙']
scores = [[random.randrange(50, 100 + 1) for _ in range(3)] for _ in range(5)] # 双层for循环生成式
print(scores)
# 创建工作簿对象
wb1 = xlwt.Workbook()
# 创建工作表对象
sheet = wb1.add_sheet('蜀国武将成绩')
# 添加表头数据
titles = ['姓名','语文','数学','英语']
# 将一个可读取的对象传递给enumerate函数,他返回一个枚举类型的对象。
# 将其转化为列表后输出元素为元祖(‘序号’,对应元素)的一个列表
for index, title in enumerate(titles):
sheet.write(0, index, title)
# 将学生姓名和成绩写入单元格
for row in range(len(scores)):
sheet.write(row + 1,0,student_names[row])
for col in range(len(scores[row])):
sheet.write(row + 1,col +1, scores[row][col])
# 保存工作簿
wb1.save('./data/考试成绩表.xls')
import openpyxl
# 读取Excel
# 加载一个工作簿
wb = openpyxl.load_workbook('./data/考试成绩表.xls')
# 获取工作表名称
print(wb.sheetnames)
# 获取工作表
sheet = wb.worksheets[0]
# 范围
print(sheet.dimensions)
# 行列
print(sheet.max_row,sheet.max_column)
# 指定单元格的值
print(sheet['C3'].value)
# 遍历
# 双层for循环
for row_ch in range(2,sheet.max_row+1):
for col_ch in 'ABCDEFG':
value= sheet[f'{col_ch}{row_ch}'].value
print(value,end='\t')
print()
# 写入Excel
# 1、创建工作簿
wb = openpyxl.Workbook()
# 2、添加工作表
sheet = wb.active
sheet.title = '三国擂台比赛成绩'
# 保存工作簿
wb.save('./data/三国擂台比赛成绩.xlsx')
'''
word
pip install lxml==4.2.5
pip install python-docx
PPT
pip install python-pptx
PDf
pip install PyPDF2
'''
更多推荐
python学习大纲(自用)
发布评论