python 是一门动态的强类型解释型语言
- 动态: python的变量在使用的时候不需要指明数据类型,类型在运行中可以发生改变
- 强类型: python的变量值类型不会自动转换,需要手动转换
- 解释型: python代码需要解释器解释执行
python 特点
代码块
缩进敏感,通过缩进来区分代码块,同一组缩进为一个代码块
局部和全局作用域
global 关键字可以将局部作用域变量提升为全局作用域
global name
python编程风格
1 | 类名使用 首字母大写,然后驼峰风格 |
模块
导入模块
import 模块名
as 别名导入
给导入的函数指定别名
from 模块名 import 函数名 as 函数别名
给导入模块指定别名
import A as B
导入模块中所有函数
from A import *
常用模块
copy
- copy.copy()
- copy.deepcopy()
random
- random.int()
sys
- sys.argv #包含命令行参数
python数据类型
- 整形int
- 浮点型float
- 字符串类型str
- 布尔类型
- True 字面量值
- False 字面量值
- None 空类型
特殊类型操作符(跟类C语言比较)
逻辑运算符
- and
- or
- not
类型转换函数
- int()
- float()
- str()
类型上的操作
- + 可以连接两个字符串
- * 可以复制字符串,str * 3 结果是strstrstr
控制流
if
1 | if expression: |
for
1 | for i in rang(1,10): |
while
1 | while expression: |
python函数
python函数定义
1 | def name(arg1=defaultValue, arg2=defaultValue): |
关键字参数和位置参数
位置参数,严重依赖实参和形参对应的位置,传递顺序不对就会导致错误
关键字参数, 就是直接指定实参传递给哪个形参,对顺序没有要求
变长参数
在形参前面加上星号 *arg, arg就会成为一个变长参数,在调用这个函数时候可以传递多个实参,这些实参被放到arg中,而arg则是一个元组
而 **arg, 则是任意数量的关键字实参,arg则是一个map,调用的时候应该这样(arg1=”xxxx”,arg2=”xxx”)
1 | def name(arg1=defaultValue, arg2=defaultValue, *args): |
函数放在模块中
可以把一个函数单独放在一个文件中,在使用的文件中只需要使用import 语句就可以导入要被使用的函数
1 | -------在独立的文件中定义函数-------------- |
使用as给导入指定别名
from 模块名 import 函数名 as 函数别名
import A as B
python常用函数
- print()
- input()
- len()
python的类
1 | class Animal: |
导入类
导入单个类
from 文件名 import 类名
从一个模块中导入多个类
from car import Car, ElectricCar
导入整个模块
import car
导入模块中的所有类(不建议)
from module_name import *
从一个模块导入到另外一个模块和别名导入跟函数导入类似
异常处理
1 | try: |
列表和元组
列表可变可以修改元素个数和元素值,元组不可变,字符串的操作也可以类似列表,但是不可变
定义
1 | list_1 = ["lucy", "john", 1234, True, 3.234] #列表 |
操作
1 | 注意: 列表序号从0开始 |
转换函数
- list()
- tuple()
字典
定义
1 | lucy = {'name': "lucy", "age": 10, "address": "china"} |
操作
1 | in或者 not in 判断是否存在key |
方法
这三个方法将会返回类似列表的值,元素分别对应map的key,value,key-value
keys()
values()
items()
get()
setdefault()
字符串操作
定义字符串
1 | "hello world" |
操作
1 | 1. 下标 见列表 |
方法
返回新的字符串
- upper()
- lower()
removeprefix()
- str.removeprefix(‘https://‘)
isXX()
- islower()
- isupper()
- isalpha()
- isalnum()
- isdecimal() #如果字符串只包含数字字符,并且非空
- isspace() # 如果字符串只包含空格、制表符和换行,并且非空
- istitle()
startswith()
endswith()
join()
', '.join(['cats', 'rats', 'bats'])# cats, rats, bats
split()
'My name is Simon'.split()# [‘My’, ‘name’, ‘is’, ‘Simon’]'MyABCnameABCisABCSimon'.split('ABC')#[‘My’, ‘name’, ‘is’, ‘Simon’]
对齐文本
- 字符串方法返回调用它们的字符串的填充版本,通过插入空格来
对齐文本。这两个方法的第一个参数是一个整数长度,用于对齐字符串 - rjust()
'Hello'.rjust(10)# ‘ Hello’'Hello'.rjust(20, '*')#’***************Hello’
- ljust()
- center()
- 字符串方法返回调用它们的字符串的填充版本,通过插入空格来
用 strip()、rstrip()和 lstrip()删除空白字符
' Hello World '.strip()# ‘Hello World’
pyperclip 模块拷贝粘贴字符串
1 | import pyperclip |
正则表达式
在python中使用正则步骤
- 用 import re 导入正则表达式模块
- 用 re.compile()函数创建一个 Regex 对象(记得使用原始字符串 r””)
- Regex对象包含的方法
- sub(“替换字符串”, “被搜索的字符串”)
- re.IGNORECASE 作为re.complile的第二个参数值,表示忽略大小写
- 向 Regex 对象的 search()方法传入想查找的字符串。它返回一个 Match 对象
- 调用 Match 对象的 group()方法,返回实际匹配文本的字符串
- 调用 Match 对象的 groups()方法,获得一个元组,元组中元素是每个正则分组的匹配
- Regex对象也有一个findall()方法,search返回一个Match对象,包含被查找字符串中的“第一次”匹配的文本,而findall则是所有
- 如果调用在一个没有分组的正则表达式上,findall()将返回一个匹配字符串的列表
- 如果调用在一个有分组的正则表达式上,方法 findall()将返回一个字符串的元组的列表(每个分组对应一个字符串),例如[(‘415’, ‘555’, ‘1122’), (‘212’, ‘555’, ‘0000’)]
贪心和非贪心匹配
Python 的正则表达式默认是“贪心”的 , 用问号? 可以声明贪心或者非贪心
r'(Ha){3,5}' 贪心, 尽可能多的匹配Ha
r'(Ha){3,5}?' 懒惰,尽可能少的匹配Ha
请注意,问号在正则表达式中可能有两种含义:声明非贪心匹配或表示可选的分组。这两种含义是完全无关的
读写文件
处理文件和目录相关方法
- os.path.join() 方法可以方便的处理路径分隔符
- 如果将单个文件和路径上的文件夹名称的字符串传递给它,os.path.join()就会返回一个文件路径的字符串,包含正确的路径分隔符
- os.getcwd() #获得当前工作路径
- os.chdir() #改变当前工作路径
- os.makedirs() #创建目录
- 调用 os.path.abspath(path)将返回参数的绝对路径的字符串。这是将相对路径转换为绝对路径的简便方法
- 调用 os.path.isabs(path) #判断绝对或者相对路径
- 调用 os.path.relpath(path, start)将返回从 start 路径到 path 的相对路径的字符串。如果没有提供 start,就使用当前工作目录作为开始路径
- os.path.basename(path) #文件所在的文件名
- os.path.dirname(path) #文件所在的目录名
- os.path.split(calcFilePath) #返回文件路径元组 (‘C:\Windows\System32’, ‘calc.exe’)
- os.path.getsize(path)将返回 path 参数中文件的字节数
- 调用 os.listdir(path)将返回文件名字符串的列表
- os.path.exists(path)
- os.path.isfile(path)
- os.path.isdir(path)
开始读写文件
- 调用 open()函数,返回一个 File 对象
- 调用 File 对象的 read()或 write()方法
- 调用 File 对象的 close()方法,关闭该文件
读取文件内容
- File对象方法
- readlines()
写入文件内容
要想写入文件,open()函数时候,要注意打开文件模式,不要以只读模式打开
- File对象方法
- write()
pathlib 模块
使用pathlib模块读写文件
1 | path1 = pathlib.Path("pi.txt") #Path可以使用相对或者绝对路径,路径不管什么平台使用/分割就可以 |
操作文件
shutil 模块
- 复制文件和文件夹
- shutil.copy(source, destination),将路径 source 处的文件复制到路径 destination处的文件夹(source 和 destination 都是字符串)
- shutil.copy()将复制一个文件,shutil.copytree()将复制整个文件夹
- 文件和文件夹的移动与改名
- shutil.move(source, destination)
- 永久删除文件和文件夹
- 利用 os 模块中的函数,可以删除一个文件或一个空文件夹。但利用 shutil 模块,可以删除一个文件夹及其所有的内容
- 用 os.unlink(path)将删除 path 处的文件
- 调用 os.rmdir(path)将删除 path 处的文件夹。该文件夹必须为空,其中没有任何文件和文件夹
- 调用 shutil.rmtree(path)将删除 path 处的文件夹,它包含的所有文件和文件夹都会被删除
send2trash 模块安全地删除
利用 send2trash,比 Python 常规的删除函数要安全得多,因为它会将文件夹和文件发送到计算机的垃圾箱或回收站,而不是永久删除它们
遍历目录树
os.walk()函数被传入一个字符串值,即一个文件夹的路径
os.walk()在循环的每次迭代中,返回 3 个值:
- 当前文件夹名称的字符串。
- 当前文件夹中子文件夹的字符串的列表。
- 当前文件夹中文件的字符串的列表
用 zipfile 模块压缩文件
zipfile 模块
JSON处理
json模块用来处理json
1 | name_list = ["lucy", "john", "lily"] |
安装第三方模块
除了 Python 自带的标准库,其他开发者写了一些自己的模
块,进一步扩展了 Python 的功能。安装第三方模块的主要方法是使用 Python 的 pip 工具
- pip 工具的可执行文件在 Windows 上称为 pip
- Windows 上,pip 位于 C:\Python34\Scripts\pip.exe
- 在 OS X 和 Linux 上称为 pip3
- OS X
- 位于/Library/Frameworks/Python.framework/Versions/3.4/bin/pip3
- Linux
- 位于/usr/bin/pip3
- 在Linux上需要单独安装
- OS X
安装第三方模块
pip install send2trash or pip3 install send2trash
运行程序
所有 Python 程序的第一行应该是#!行,它告诉计算机你想让 Python 来执行这个程序。该行以#!开始,但剩下的内容取决于操作系统
- 在 Windows 上,第一行是 #! python3
- 在 OS X,第一行是 #! /usr/bin/env python3
- 在 Linux 上,第一行是 #! /usr/bin/python3
在 Windows 上运行 Python 程序
1 | 在 Windows 上,Python3.4 的解释程序位于 C:\Python34\python.exe或者,方 |
OS x 和 Linux上运行python程序
1 | 在OS X 和 Linux上运行python程序,只需要给.py 文件执行权限,然后在命令行上以绝对或者相对路径执行即可 |