目录
1、列表操作
2、字典处理
3、字符串操作
4、模式匹配与正则表达式
5、shutil模块
6、调试
7、保持时间、计划任务、启动程序
8、发送电子邮件和短信
9、多线程编程
用下标取得列表中的单个值;负数下标。
列表连接和复制
del语句删除列表中的值del spam[2]
index在列表中查找值,找到则返回值的下标
append、insert在列表中添加值
append将参数添加到列表末位
insert()方法的第一个参数是新值的下标,第二个参数是要插入的新值
remove从列表中删除值
spam.sort(reverse=True)排序
spam.sort(key=str.lower)
元组与列表的主要区别还在于,元组像字符串一样,是不可变的。元组不能让它们的值被修改、添加或删除
函数 list()和 tuple()将返回传递给它们的值的列表和元组版本
copy.copy(),可以用来复制列表或字典这样的可变值,而不只是复制引用
如果要复制的列表中包含了列表,那就使用 copy.deepcopy()函数来代替
字典是不排序的,所以不能像列表那样切片
keys、values、items方法对应返回键、值、键-值对
字典有一个get()方法,它有两个参数:要取得其值的键,以及如果该键不存在时,返回的备用值0
picnicItems = {'apples': 5, 'cups': 2}
>>> 'I am bringing ' + str(picnicItems.get('cups', 0)) + ' cups.'
'I am bringing 2 cups.'
>>> 'I am bringing ' + str(picnicItems.get('eggs', 0)) + ' eggs.'
'I am bringing 0 eggs.
setdefault()为字典中某个键设置一个默认值,当该键没有任何值时使用它
字符串可以用双引号开始和结束,就像用单引号一样;
可以在字符串开始的引号之前加上 r,使它成为原始字符串。“原始字符串”完全忽略所有的转义字符,打印出字符串中所有的倒斜杠;
多行字符串的起止是 3 个单引号或 3 个双引号;
isalpha()返回 True,如果字符串只包含字母,并且非空;
isalnum()返回 True,如果字符串只包含字母和数字,并且非空;
isdecimal()返回 True,如果字符串只包含数字字符,并且非空;
isspace()返回 True,如果字符串只包含空格、制表符和换行,并且非空;
istitle()返回True,如果字符串仅包含以大写字母开头、后面都是小写字母的单词。
字符串方法 startswith()和 endswith()
join()方法在一个字符串上调用,参数是一个字符串列表,返回一个字符串。返回的字符串由传入的列表中每个字符串连接而成;
split()方法做的事情正好相反:它针对一个字符串调用,返回一个字符串列表。
rjust()和 ljust()字符串方法返回调用它们的字符串的填充版本,通过插入空格来对齐文本。这两个方法的第一个参数是一个整数长度,用于对齐字符串;center()字符串方法与 ljust()与 rjust()类似,但它让文本居中,而不是左对齐或右对齐。
删除字符串左边、右边或两边的空白字符(空格、制表符和换行符)。strip()字符串方法将返回一个新的字符串,它的开头或末尾都没有空白字符。lstrip()和 rstrip()方法将相应删除左边或右边的空白字符。
pyperclip 模块有 copy()和 paste()函数,可以向计算机的剪贴板发送文本,或从它接收文本。将程序的输出发送到剪贴板,使它很容易粘贴到邮件、文字处理程序或其他软件中。
用 re.compile()函数创建一个 Regex 对象(记得使用原始字符串)。
向 Regex 对象的 search()方法传入想查找的字符串。它返回一个 Match 对象。
调用 Match 对象的 group()方法,返回实际匹配文本的字符串。
|管道实现多个中匹配一个,?实现可选匹配,*(称为星号)意味着“匹配零次或多次”,+(加号)则意味着“匹配一次或多次”,如果想要一个分组重复特定次数,就在正则表达式中该分组的后面,跟上花括号{}包围的数字。
\d | 0 到 9 的任何数字 | · {n,}匹配 n 次或更多前面的分组。 |
\D | 除 0 到 9 的数字以外的任何字符 | · {,m}匹配零次到 m 次前面的分组。 |
\w | 任何字母、数字或下划线字符(可以认为是匹配“单词”字符) | · {n,m}匹配至少 n 次、至多 m 次前面的分组。 |
\W | 除字母、数字和下划线以外的任何字符 | · {n,m}?或*?或+?对前面的分组进行非贪心匹配。 |
\s | 空格、制表符或换行符(可以认为是匹配“空白”字符) | · ^spam 意味着字符串必须以 spam 开始。 |
\S | 除空格、制表符和换行符以外的任何字符 | · spam$意味着字符串必须以 spam 结束。 |
· ?匹配零次或一次前面的分组。 | · .匹配所有字符,换行符除外。 | |
· *匹配零次或多次前面的分组。 | · \d、\w 和\s 分别匹配数字、单词和空格。 | |
· +匹配一次或多次前面的分组。 | · \D、\W 和\S 分别匹配出数字、单词和空格外的所有字符。 | |
· {n}匹配 n 次前面的分组。 | · [abc]匹配方括号内的任意字符(诸如 a、b 或 c)。 | |
· [^abc]匹配不在方括号内的任意字符。 |
sub替换字符串
import pyperclip, re
phoneRegex = re.compile(r'''(
(\d{3}|\(\d{3}\))? # area code
(\s|-|\.)? # separator
(\d{3}) # first 3 digits
(\s|-|\.) # separator
(\d{4}) # last 4 digits
(\s*(ext|x|ext.)\s*(\d{2,5}))? # extension
)''', re.VERBOSE)
emailRegex = re.compile(r'''([a-zA-Z0-9._%+-]+ # username
@ # @ symbol
[a-zA-Z0-9.-]+ # domain name
(\.[a-zA-Z]{2,4}) # dot-something
)''', re.VERBOSE)
调用shutil.copy(source, destination),将路径source 处的文件复制到路径destination处的文件夹(source 和 destination 都是字符串)。如果 destination 是一个文件名,它将作为被复制文件的新名字。该函数返回一个字符串,表示被复制文件的路径。
调用 shutil.move(source, destination),将路径 source 处的文件夹移动到路径destination,并返回新位置的绝对路径的字符串。
用 try 和 except 语句来处理 Python 的异常;取得反向跟踪的字符串def bacon():
raise Exception('This is the error message.')
断言assert 语句执行。如果检查失败,就会抛出异常
日志模块logging
import logging
logging.basicConfig(level=logging.DEBUG, format=' %(asctime)s - %(levelname)s
- %(message)s')
time 模块
记录程序运行时间
startTime = time.time()
prod = calcProd()
endTime = time.time()
正如HTTP 是计算机用来通过因特网发送网页的协议,简单邮件传输协议(SMTP)是用于发送电子邮件的协议。SMTP 规定电子邮件应该如何格式化、加密、在邮件服务器之间传递,以及在你点击发送后,计算机要处理的所有其他细节。
>>> import smtplib
>>> smtpObj = smtplib.SMTP('smtp.example.com', 587)
>>> smtpObj.ehlo()
smtpObj.starttls()
smtpObj.login('[email protected]', 'MY _ _ SECRET _ _ PASSWORD')
smtpObj.sendmail('[email protected]', '[email protected]', 'Subject: So long.\nDear Alice, so long and thanks for all the fish. Sincerely, Bob')
smtpObj.quit()
配置 SMTP 服务器和端口,搜索“<你的提供商> SMTP 设置”,应该能找到相应的服务器和端口。
得到电子邮件提供商的域名和端口信息后,调用 smtplib.SMTP()创建一个 SMTP对象,传入域名作为一个字符串参数,传入端口作为整数参数。SMTP 对象表示与SMTP 邮件服务器的连接,它有一些发送电子邮件的方法。
连接到 Gmail:
>>> smtpObj = smtplib.SMTP('smtp.gmail.com', 587)
>>> type(smtpObj)
如果 smtplib.SMTP()调用不成功,你的 SMTP 服务器可能不支持 TLS 端口 587。在这种情况下,你需要利smtplib.SMTP_SSL()和 465 端口,来创建 SMTP 对象。
>>> smtpObj = smtplib.SMTP_SSL('smtp.gmail.com', 465)
得到 SMTP 对象后,调用它的名字古怪的 EHLO()方法,向 SMTP 电子邮件服务器“打招呼”。这种问候是 SMTP 中的第一步,对于建立到服务器的连接是很重要的。你不需要知道这些协议的细节。只要确保得到 SMTP 对象后,第一件事就是调用 ehlo()方法,否则以后的方法调用会导致错误。
smtpObj.ehlo()
如果要连接到 SMTP 服务器的 587 端口(即使用 TLS 加密),接下来需要调用starttls()方法。这是为连接实现加密必须的步骤。如果要连接到465 端口(使用 SSL),加密已经设置好了,你应该跳过这一步。
smtpObj.starttls()
登录到电子邮件提供商的 SMTP 服务器后,可以调用的 sendmail()方法来发送电子邮件
smtpObj.sendmail('my _ _ email _ _ [email protected]', '[email protected]',
'Subject: So long.\nDear Alice, so long and thanks for all the fish. Sincerely,Bob')
确保在完成发送电子邮件时,调用 quit()方法
smtpObj.quit()
thread 模块提供了基本的线程和锁定支持;而 threading 模块提供了更高级别、功能更全面的线程管理。使用 Queue 模块,用户可以创建一个队列数据结构,用于在多线程之间进行共享。
对 象 | 描述 |
Thread | 表示一个执行线程的对象 |
Lock | 锁原语对象(和 thread 模块中的锁一样) |
RLock | 可重入锁对象,使单一线程可以(再次)获得已持有的锁(递归锁) |
Condition | 条件变量对象,使得一个线程等待另一个线程满足特定的“条件”,比如改变状态或某个数据值 |
Event | 条件变量的通用版本,任意数量的线程等待某个事件的发生,在该事件发生后所有线程将被激活 |
Semaphore | 为线程间共享的有限资源提供了一个“计数器”,如果没有可用资源时会被阻塞 |
BoundedSemaphore | 与 Semaphore 相似,不过它不允许超过初始值 |
Timer | 与 Thread 相似,不过它要在运行前等待一段时间 |
Barrier | 创建一个“障碍”,必须达到指定数量的线程后才可以继续 |
Thread 对象的属性和方法 | |
属 性 | 描 述 |
Thread 对象数据属性 | |
name | 线程名 |
ident | 线程的标识符 |
daemon | 布尔标志,表示这个线程是否是守护线程 |
Thread 对象方法 | |
_init_(group=None, tatget=None, name=None, args=(), kwargs ={}, verbose=None, daemon=None)③ |
实例化一个线程对象,需要有一个可调用的 target,以及其参数 args或 kwargs。还可以传递 name 或 group 参数,不过后者还未实现。此外,verbose 标志也是可接受的。而 daemon 的值将会设定thread.daemon 属性/标志 |
start() | 开始执行该线程 |
run() | 定义线程功能的方法(通常在子类中被应用开发者重写) |
join (timeout=None) | 直至启动的线程终止之前一直挂起;除非给出了 timeout(秒),否则会一直阻塞 |
getName() | 返回线程名 |
setName (name) | 设定线程名 |
isAlivel /is_alive () | 布尔标志,表示这个线程是否还存活 |
isDaemon() | 如果是守护线程,则返回 True;否则,返回 False |
setDaemon(daemonic) | 把线程的守护标志设定为布尔值 daemonic(必须在线程 start()之前调用) |
一个人啃书吃力啊,有没有来吹牛皮的?