python文档整理-《Python编程快速上手-让繁琐工作自动化》

python基础

数据类型

整型、浮点型、字符串

字符串连接 ,”str_a” + “str_b”

字符串复制,”str”*5,会复制5次

字符串赋值,str = 100

函数

print()

input()

len(), len(“hello”) 计算字符串长度

str(),int(),float(), 转数据类型

42 == “42” , false,字符串是文本,于与整型不等

42 == 42.0,true,python判定整数和浮点都是数字,是相等的

控制流

比较操作符,<>=

三个布尔操作符 and 、or、 not

if

if name == 'kiwi':
    print("you name is kiwi")
elif age == '18':
    print("age is 18")
else:
    print("none")

while

name = ''
while name != 'kiwi':
    print("enter you name")
    name = input()
print("thank you!")

break

while true:
    print("enter you name")
    name = input()
    if name == 'kiwi':
        break
print("thank you!")

continue

for循环 和 range()函数

for i in range(5):
    print(str(i))

range(0, 10, 2) 三个参数 开始值,停止值,步长

import 语句

import random
from random impotr *

sys.exit() 提前结束程序

import sys
...
sys.exit()

函数

def语句和参数

def hello(name):
    print('hello' + name)

返回 return

def getConf(type):
    if type == 1:
        return 'type_1'
    elif type == 2:
        return '2222222222'

局部 和 全局作用域

global 语句

def spam():
    gloable eggs
    eggs = 'spam' # this is gloabl
def bak():
    eggs = 'bak' # this is local
def ham():
    print(eggs) # this is gloabl
    
eggs = 100

列表

spam = ['cat','bag','root','egg']
spam[1]
spam[-1]  # egg,倒叙

# 列表切片,开始下标到结束下标(不包含),结束下表可为负数
spam[1:3]  # ['bag','root']

# 列表长度
len(spam) # 4

# 删
del spam[2]

列表链接 yu 复制

# +号链接2个列表,类似merge
spamA + spamB
# *号复制
spam*3

列表循环

spam = ['aa','bb','cc']
for i in range(len(spam)):
    print(spam[i])

in 和 not in

spam = ['aa','bb','cc']
name = input()
if name not in spam:
    print('error')

spam.index(‘aa’)

spam = ['aa','bb','cc']
span.index('cc') # 2

append() / insert()

队尾插入 / 某个位置插入

仅仅要列表方法,用其它数据类型会报错

spam = ['aa', 'bb', 'cc']
spam.append('gold') # ['aa', 'bb', 'cc', 'gold']
spam.insert(1,'egg') # ['aa', 'egg', 'bb', 'cc']

spam.remove(‘aa’) 删除

同 del spam[0]

spam.sort() 排序

spam.sort(reverse=True),逆向排序

注意:1,及时排序,不要赋值;2,不能对既有数字又有字符串排序,报错;3,基于ASCII排序,大写字母排序靠前

类似列表,字符串和元祖

字符串也可以按下标取值,切片,for循环,len()

元祖,用(), 非[]

元祖是不可变的,不能被修改、删除、添加

spam = ('aa', 20)
spamB = ('aa',)  #只有一个值的元祖

type()

type(spanB) # class tuple 

list() 和 tuple() 转换数据类型

tuple(['cat','dog'])  # ('cat', 'dog')
list(('cat','god'))   # ['cat', 'dog']
list('hello')         # ['h','e','l','l','o']

引用

列表复制是复制的引用地址,而非列表本身

copy 模块

复制列表

spamB = copy.copy(spamA)

字典和结构化数据

字典数据类型

spam = {'name': 'Zophie', 'age': 7}

keys(),values(),items()

使用:birthdays.keys(),返回的不是列表,是这些数据类型,dict_keys,dict_values,dict_items,可以for循环。如果要转成列表,用 list() 方法

in,not in 检查键或值是否存在

>>> 'name' in spam.keys()  # true,这个用法 等同于 'name' in spam, 默认检查key是否存在
>>> 'Zophie' not in spam.valus() # false

get()

有2个参数:1 健值,2 默认值

spam = {'name': 'Zophie', 'age': 7}
spam.get('age', 0)  # 7
spam.get('sex', 0)  # 0

setdefault()

setdefault()方法提供了一种方式,在一行中完成这件事。传递给该方法的第一 个参数,是要检查的键。第二个参数,是如果该键不存在时要设置的值。如果该键 确实存在,方法就会返回键的值。在交互式环境中输入以下代码

spam.setdefault('color', 'black')  # color存在,返回该值;不存在 返回black

统计字符

str = 'hello world!'
count = {}
for i in str:
    count.setdefault(i, 0)
    count[i] = count[i] + 1

print(count)

字符串操作

基础

spam = "That is Alice's cat."  # 双引号
spam = 'Say hi to Bob\'s mother.' # 单引号,需转移字符 反斜杠 \
print(r'That is Carol\'s cat.') # “原始字符串”.加r, 完全忽略所有的转义字符

#三重引用,多行字符串的起止是 3 个单引号或 3 个双引号
print('''Dear Alice,
Eve's cat has been arrested for catnapping, cat burglary, and extortion.

        Sincerely,
Bob''')

# 多行注释,三个双引号
"""This is a test Python program.
Written by Al Sweigart al@inventwithpython.com
This program was designed for Python 3, not Python 2.
"""
def spam():
    # code
    
#字符串下标和切片
spam = 'hello'
span[1:3] # 'el'

#字符串 in,not in
sp = 'hello world'
'hello' in sp # true

字符串方法 upper(),lower(),isupper(),islower()

spam.upper()

请注意, 这些方法没有改变字符串本身, 而是返回一个新字符串

如果需要改变,请赋值

spam = spam.upper()

isX 字符串方法

 isalpha()返回 True, 如果字符串只包含字母, 并且非空;  isalnum()返回 True,如果字符串只包含字母和数字,并且非空;  isdecimal()返回 True,如果字符串只包含数字字符,并且非空;  isspace()返回 True,如果字符串只包含空格、制表符和换行,并且非空;  istitle()返回 True,如果字符串仅包含以大写字母开头、后面都是小写字母的单词。 在交互式环境中输入以下代码:

startswith()和 endswith()方法

startswith()和 endswith()方法返回 True, 如果它们所调用的字符串以该方法传入 的字符串开始或结束。

join(), spilt()

join() 将列表中间插入符号,并转字符串,split() 相反,默认是以空格为分割符,有参数可替换

>>> ', '.join(['cats', 'rats', 'bats']) # 'cats, rats, bats'
>>> 'My name is Simon'.split()     #['My', 'name', 'is', 'Simon']

>>> spam.split('\n')  # 以换行转列表

ljust(),rjust(),center()

ljust() 字符串右边对齐,左边不够默认补充空格,第二个参数可为补充字; center()就是剧中,两边补空格

>>> 'Hello'.rjust(20, '*')  #'***************Hello'

strip(),rstrip(),lstrip() 删除空白字符

空格, 制表,换行 都算空白符

pyperclip 模块拷贝粘贴字符串

pyperclip 模块有 copy()和 paste()函数, 可以向计算机的剪贴板发送文本, 或从 它接收文本。

pyperclip 模块不是 Python 自带的。要安装它 , 书中有个密码管理的脚本,可以学习一下,就是通过参数到字典中找到密码,拷贝到计算机剪贴板,在复制到你的登录框

>>> import pyperclip
>>> pyperclip.copy('Hello world!')
>>> pyperclip.paste()

自动化任务

默认匹配与正则表达式

查找文本

1 . 用 import re 导入正则表达式模块。 2.用 re.compile()函数创建一个 Regex 对象(记得使用原始字符串)。 3.向 Regex 对象的 search()方法传入想查找的字符串。它返回一个 Match 对象。 4.调用 Match 对象的 group()方法,返回实际匹配文本的字符串

>>> phoneNumRegex = re.compile(r'\d\d\d-\d\d\d-\d\d\d\d')
>>> mo = phoneNumRegex.search('My number is 415-555-4242.')
>>> print('Phone number found: ' + mo.group())
Phone number found: 415-555-4242

利用括号分组

>>> phoneNumRegex = re.compile(r'(\d\d\d)-(\d\d\d-\d\d\d\d)')
>>> mo = phoneNumRegex.search('My number is 415-555-4242.')
>>> mo.group(1) # 415
>>> mo.group(2) # 555-4242
>>> mo.group(0) # 415-555-4242
>>> mo.groups() # ('415', '555-4242')
>>> areaCode, mainNumber = mo.groups()

管道匹配多个分组

>>> heroRegex = re.compile (r'Batman|Tina Fey')
>>> mo1 = heroRegex.search('Batman and Tina Fey.')
>>> mo1.group()  # 第一次出现的匹配文本,将作为 Match 对象返回。用findall() 匹配所有
'Batman 

符号字符总结

 ?匹配零次或一次前面的分组。 匹配零次或多次前面的分组。  +匹配一次或多次前面的分组。  {n}匹配 n 次前面的分组。  {n,}匹配 n 次或更多前面的分组。  {,m}匹配零次到 m 次前面的分组。  {n,m}匹配至少 n 次、至多 m 次前面的分组。  {n,m}?或?或+?对前面的分组进行非贪心匹配。  ^spam 意味着字符串必须以 spam 开始。  spam$意味着字符串必须以 spam 结束。  .匹配所有字符,换行符除外。  \d、 \w 和\s 分别匹配数字、单词和空格。  \D、 \W 和\S 分别匹配出数字、单词和空格外的所有字符。  [abc]匹配方括号内的任意字符(诸如 a、 b 或 c)。  [ ^abc ] 匹配不在方括号内的任意字符。

(?)零次或一次

>>> batRegex = re.compile(r'Bat(wo)?man')  # Batman / Batwoman

(*),零次或多次

(+)一次或多次

( {n,m})n次-m次

贪心匹配,非贪心

python 正则表达式默认是“贪心”匹配的,及最长字符匹配,花括号后面加个?,改为“非贪心”匹配,这里?号就是另外含义了:声明为费贪心模式

>>> greedyHaRegex = re.compile(r'(Ha){3,5}') # 默认贪心
>>> mo1 = greedyHaRegex.search('HaHaHaHaHa')
>>> mo1.group()
'HaHaHaHaHa'
>>> nongreedyHaRegex = re.compile(r'(Ha){3,5}?') # 加?声明为非贪心
>>> mo2 = nongreedyHaRegex.search('HaHaHaHaHa')
>>> mo2.group()
'HaHaHa'

findall()

findall()不是返回一个 Match 对象, 而是返回一个字符串列表(正则表达式没有分组) ,如果在正则表达式中有分组, 那么 findall 将返回元组的列表

>>> phoneNumRegex = re.compile(r'\d\d\d-\d\d\d-\d\d\d\d') # has no groups
>>> phoneNumRegex.findall('Cell: 415-555-9999 Work: 212-555-0000')
['415-555-9999', '212-555-0000']

>>> phoneNumRegex = re.compile(r'(\d\d\d)-(\d\d\d)-(\d\d\d\d)') # 如果在正则表达式中有分组, 那么 findall 将返回元组的列表
>>> phoneNumRegex.findall('Cell: 415-555-9999 Work: 212-555-0000')
[('415', '555', '1122'), ('212', '555', '0000')]

字符分类

\d 0到9的任何数字 \D 除0到9的数字以外的任何字符 \w 任何字母、数字或下划线字符(可以认为是匹配“单词”字符) \W 除字母、数字和下划线以外的任何字符 \s 空格、制表符或换行符(可以认为是匹配“空白”字符) \S 除空格、制表符和换行符以外的任何字

自定义分类,及取反(^)

>>> vowelRegex = re.compile(r'[aeiouAEIOU]')
>>> vowelRegex = re.compile(r'[a-zA-Z0-9]') #将匹配所有小写字母、 大写字母和数字。
>>> consonantRegex = re.compile(r'[^aeiouAEIOU]')  #  取反(^)

插入字符(^),美元字符($)

注意(^)和上面的区别

>>> wholeStringIsNum = re.compile(r'^\d+$') #匹配从开始到结束都是数字的字符串

(.)点号,只匹配一个字符

>>> atRegex = re.compile(r'.at')
>>> atRegex.findall('The cat in the hat sat on the flat mat.')
['cat', 'hat', 'sat', 'lat', 'mat']

(.*) 匹配任意字符

用句点字符匹配换行

re.compile(r’robocop’, re.DOTALL)

不区分大小写

向 re.compile()传入 re.IGNORECASE 或 re.I,作为第二个参数

>>> robocop = re.compile(r'robocop', re.I)
>>> robocop.search('RoboCop is part man, part machine, all cop.').group()
'RoboCop'