快速python script入门
python基础
- 整型int 浮点型float 字符串 strs
- 字符串连接 ‘a’ + ‘b’ 字符串复制 ‘a’*5
- 整除 // 指数 **
- print(); 可以传入整型值或字符串
- input();获取用户输入,返回字符串
- len() : 返回字符串长度; str()、int()、float()转换为字符串、int 、float
控制流
布尔值 True False
比较操作符求值为布尔值 ,整型或者浮点型永远不会与字符串相等
布尔操作符(只接受布尔值作为操作数) and or not
代码块:根据代码行的缩进,知道代码块的开始和结束
控制流语句:
if:
if a==b : print() elif a==c: print() else: print()
while:
while a<5: print() print()
break:立即跳出循环
break
continue:马上跳回循环开始处,进行下一次循环
continue
for 和range()
for i in range(5) #range()最多有三个参数;参数1:循环变量开始的值,参数2:循环变量结束的值;参数3:步长 print()
导入模块
import random,sys,os,math #或者 from random import * #使用这种形式,调用时不需要random.前缀
函数
def hello(name) #保存在该变量的值,在函数返回后丢失 print(name) return 'resp' re = hello('alice')
python中存在一个值None,表示没有值,在幕后,python对于所有没有retrun定义的函数,都会在末尾加上return None
关键字参数和print(),print()有可选的变量end和sep,分别用来指定函数末尾打印什么以及在参数之间打印什么来隔开他们。
print ('hello,end='') print ('a','b','c',sep=',')
局部作用域和全局作用域:
- 一个函数被调用时,就创建了一个局部作用域,在这个函数内赋值的所有变量只存在于该局部作用域内,函数返回时,这个局部作用域就被销毁了,这些变量也会丢失。
- 避免全局变量和局部变量使用相同的名字。
- global:需要在函数内修改全局变量,使用global语句。
异常处理:
- 错误可以有try和except来处理,将可能出错的语句放在try子句中,如果出错就会转到接下来的except子句开始处。
列表
spam=['a','b','e','c'] spam[0]='a' spam[-1]='c' spam[1:3]=['b','e'] #1-3 不包括3 spam=[['d','e'],['a','b','c']] spam[0][0]='d' #多重下标 len(spam) spam=spam+spam #连接 spam=spam*3 #复制 del spam[2] #删除,delete也可以用于一个简单变量 for i in range(len(spam)) #列表循环 'a' in spam 'a' not in spam #判断值是否在列表中,返回布尔值 a0,a1,a2 = ['a','b','c'] #多重赋值,左边变量值必须与右边列表长度严格相等 spam += 1 spam.index('a') #如果列表中存在该值,返回下标,否则报错 spam.append('d') #将参数添加至列表末尾 spam.insert('1','a0') #参数添加至列表下标处 spam.remove('a') #删除列表中该值,如果不存在会报错,多次出现的值只会删除第一个 spam.sort() #排序,数字或者ASCII字符增序,小写a在大写Z之后 spam.sort(key=str.lower) #按字典顺序增序排列字符串 a A b B spam.sort(reverse=True) #排序,逆序,sort不能对既有字符串又有数字的列表排序 #####字符串也可以使用下标取值、切片、for循环、in 、not in #元组 #元组与列表几乎一致,除了 #1 eggs=('a','b','c') #用圆括号定义 #2 元组不可变 eggs=('a',) #当元组中只有一个值的时候加上逗号,否则会被错误认为时字符串。 #声明元组即告诉所有阅读代码的人,该值不会改变(字符串也不可变,即无法单独改变其中某一下标中的值)。 list() #返回参数的列表形式 tuple() #返回参数的元组形式,类型转换 #引用 spam = ['a','b','c'] ches = spam ches[1] = ['d'] #此时spam中的'b'也随之改变为'd',因为ches是对spam值的引用 #copy模块 import copy spam=['a','b','c'] ches=copy.copy(spam) ches=copy.deepcopy(spam) #如果复制的列表中还含有列表
字典和结构化数据
*字典 键值对
mycat = {'size':'fat','color':'gray','dis':'loud'} mycat['size'] #fat,用in关键字可以查看输入的名字是否存在字典中 'size' in mycat.keys(); 'fat' not in mycat.values() for i in mycat.values(); for i in mycat.keys(); for i in mycat.items(); #迭代字典中每个值、键、键值对; #values keys items 方法返回的并不是列表,无法被改变。可以通过list()函数返回为列表。 spam = list(mycat.keys()) mycat.get('fat',0) #返回键,如果不存在即返回第二个参数(备用值) mycat.setdefault('weight',5) #检查weight键,如果不存在设置其为5,如果存在,返回该键的值。 #通过pprint模块 更好的打印字典 import pprint pprint.pprint(mycat) #打印 pprint.pformat(mycat) #整形 并不打印
字符串操作
字符串可以使用双引号开始和结束,以便在字符串中使用单引号;也可以使用转义字符
在字符串开始的引号之前加上 r ,使它成为原始字符串,会忽略所有转义字符
使用三个引号 ‘’‘ 或者 ‘’‘’‘’‘开始和结束即为多行字符串,’‘’之间的所有字符均为字符串的一部分。python的代码块缩进原则在此不适用。可以使用多行字符串作为多行注释
字符串方法:
upper()、lower():返回大写/小写字符串
isupper()、islower():是否均是大写/小写且非空 返回布尔值
isalpha()只包含字母且非空
isalnum()只包含数字和字母且非空
isdecimal()只包含数字且非空
isspace()只包含空格、制表符、换行符且非空
istitle()只包含以大写字母开头后面均是小写字母的单词
startwith() endwitdh() 传入的参数为字符串的开始或者结束返回true
join() :
'abc'.join(['1','2','3']) #返回1abc2abc3 (相当于替换了,)
split():将字符串拆分为列表返回,默认以各种空白符分割,也可以传入参数指定
'1abc2abc3'.split('abc') #返回[1,2,3]
rjust() ljust()返回字符串的填充版本,center()则是让文本居中,通过插入空格来对其文本
'hello'.ljust(10,'*') #参数二可以指定填充字符
strip():返回一个新的字符串,删去其开头和结尾的空白字符;lstrip()、rlstrip()将删除相应的左边或右边的空白字符
pyperclib模块,可以向计算机的剪切板发送文本,或从它接收文本:
import pyperclib pyperclib.copy('hello') pyperclib.paste()
模式匹配与正则表达式
python所有的正则表达式函数都在re模块中
import re
创建正则表达式对象
PhoneNum=re.complie(r'\d\d\d-\d\d\d-\d\d\d\d') #创建正则表达式对象 mo = PhoneNum.search('my phone num is 111-111-1111.') #按PhoneNum查找传入的字符串,返回第一匹配,如果没有,返回None print(mo.group)
匹配更多模式
利用括号分组:添加括号将在正则表达式创建中分组:(\d\d\d)-(\d\d\d-\d\d\d\d)。然后可以使用group()匹配对象方法。
正则表达式中第一个括号是第一组,第二个括号时第二组,向group()中传入不同参数,可以匹配文本的不同部分,传入0或者不传入参数,会返回整个匹配的文本
groups() 可以一次获取所有分组,返回为列表
管道 字符|
r'a|b #匹配a或者b,如果a、b都出现,将第一次出现的匹配文本返回 r'A(a|b|c) #匹配 Aa Ab Ac 任意一个
可选匹配
r'bat(wo)?man #wo是可选匹配,出现0次或者1次
* 匹配0次或多次
+ 匹配一次或多次
{} 匹配特定次数 :{3} 3次 ; {3,} 3次或更多次 ;{3,5} 3到5次 ; {,5} 0到5次
贪心匹配和非贪心匹配
python正则默认是贪心的,{}? 加个问号即可设置为非贪心模式
findall()
mo = PhoneNum.findall('aaaa') #返回为列表返回所有匹配,如果正则中有分组,返回为元组列表,每个元组表示一个分组
字符分类:
\d #0-9任意数字 \D #0-9外任意字符 \w #任何字母、数字、下划线 \W #除字母、数字、下划线的任何字符 \s #空格、制表符、换行符 \S #除空格、制表符、换行符以外任意字符 #使用[]建立自己的字符分类 [aeiouAEIOU] #匹配所有元音字符,不区分大小写 ;方括号内,普通的正则表达式符号不会被解释,即不需要加\转义 [0-5.] #匹配0到5和. [^aeiou] #加^即可得到非字符类,匹配aeiou之外字符 #在正则表达式开始处使用^,表示必须从开始处匹配 r'^Hello' #在正则表达式末尾使用$,表示结尾匹配该模式 r'Hello$'
通配符:
. 为通配符,可以匹配换行之外的所有字符
.* 匹配所有字符(除换行)
re.complie(r'.*',re.DOTALL) #传入参数re.DOTALL 使得. 可以匹配换行字符;传入re.IGNORECASE 或 re.I 正则不区分大小写 ;传入re.VERBOSE 忽略正则表达式字符串中的空白符和注释,使得表达式可读性更好;可以使用|将多个参数传入。
替换:
sub()
PhoneNum.sub('aaa','bbbbbbbbbbbbbbbbb') #将参数二中字符串匹配部分替换为参数一,返回替换后的字符串
读写文件
文件与文件路径
import os os.path.join('usr','bin','spam') #根据系统返回 windows:usr\\bin\\spam linux:usr/bin/spam os.path.join('usr','bin','spam','fliename') os.getcwd() #返回当前工作路径字符串 os.chdir('usr/bin/') #改变工作目录 os.makedirs('dir') #创建文件夹 os.path.abspath(path) #返回一个相对路径的绝对路径 os.path.isabs(path) #如果参数为绝对路径,返回true ;为相对路径,返回false os.path.relpath(path,start) #返回start路径到path的相对路径的字符串,start缺省值为当前工作路径 os.path.getsize(path) #返回path参数中文件的字节数 os.listdir(path) #返回文件名字符串的列表,包含path参数中的每个文件 os.path.exists(path) #文件或文件夹是否存在 os.path.isdir(path) #是否存在且是文件夹
文件操作
MyFile = open('usr/a.txt','r') #只读打开 , w为覆盖写 ,a为追加写 FileLine = MyFile.read() #整个文件读取为一个字符串的值并返回 FileLines = MyFile.readlines() #返回一个字符串列表,每行为一个字符串 MyFile.close MyFile = open('usr/a.txt','w') MyFile.write('add a new line\n') MyFile.close
shelve模块
利用shelve模块可以将python程序中的变量保存到二进制的shelf文件中,这样,程序就可以从硬盘中恢复变量的数据
import shelve shelfFile = shelve.open('mydata') cats = ['a','b','c'] shelfFile['cats'] = cats #将cats保存在shelfFile中 shelfFile.close #环境会自动生成mydata.db文件 shelfFile = shelve.open('mydata') shelfFile['cats'] #返回['a','b','c'] shelfFile.keys(); #和字典一样操作 shelfFile.close
组织文件
shutil模块
import shutil,os shutil.copy('./1.xtx','./') #将参数1文件复制到参数2路径中 返回被复制文件的路径 shutil.copy('./1.txt','./2.txt') shutil.copytree('/usr/test','usr/test2') #复制文件夹 返回新复制的文件夹的路径 shutil.move('/usr/11.txt','./2.txt') #移动,返回新位置的绝对路径 os.unlink(path) #删除path处文件 os.rmdir(path) #删除path处文件夹(只能删除空文件夹) shutil.rmtree(path) #删除文件价和其内所有文件文件夹
send2trash :更安全的删除
import send2trash send2trash.send2trash('bacon.txt') #发送到垃圾箱,而不是之前的永久删除
遍历目录树:
for folderName,sunfloders,flienames in os.walk(path) #os.walk()在每次迭代时返回三个值:1、当前文件夹名称的字符串;2、当前文件夹中子文件夹的字符串的列表;3、当前问价夹中文件的字符串的列表
zipfile模块压缩文件
import zipfile,os exZip = zipfile.ZipFile(example.zip) #创建一个ZipFile对象,传入zip文件字符串 exZip.namelist() #返回ZIP文件中所有文件和文件夹的字符串列表 spamInfo = exZIP.getinfo('spam.txt') #返回压缩文件中某一特定文件的info exZip.extractall(path) #解压缩至path exZip.extract('spam.txt',path) #解压缩单个文件至path,返回解压后的绝对路径 exZip.close() newZip = zipfile.ZipFile('new.zip','w') newZip.write('./spam.txt',compress_type = zipfile.ZIP_DEFLATED) #spam压缩至压缩文件 newZip.close()