Python进阶
应用
- 等待用户输入: input([prompt])函数和raw_input([prompt])函数基本类似,但是 input 可以接收一个Python表达式作为输入,并将运算结果返回。
raw_input("\n\nPress the enter key to exit.")
- Python数据类型转换
- int(x [,base]) 将x转换为一个整数
- long(x [,base] ) 将x转换为一个长整数
- float(x) 将x转换到一个浮点数
- str(x) 将对象 x 转换为字符串
- repr(x) 将对象 x 转换为表达式字符串
- eval(str) 用来计算在字符串中的有效Python表达式,并返回一个对象
- tuple(s) 将序列 s 转换为一个元组
- list(s) 将序列 s 转换为一个列表
- set(s) 转换为可变集合
- dict(d) 创建一个字典。d 必须是一个序列 (key,value)元组。
Python字符串格式化
- print "%s : %d " % ('hz', 21)
- %s 格式化字符串
- %d 格式化整数
- %u 格式化无符号整型
- %f 格式化浮点数字,可指定小数点后的精度
常用函数(list、tup)
- cmp(list1, list2) 比较两个列表的元素
- len(list) 列表元素个数
- max(list) 返回列表元素最大值
- min(list) 返回列表元素最小值
- tuple(seq) 将列表转换为元组。
- list(seq)将元组转换为列表
列表函数&方法
- list.append(obj) 在列表末尾添加新的对象
- list.count(obj) 统计某个元素在列表中出现的次数
- list.extend(seq) 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
- list.index(obj) 从列表中找出某个值第一个匹配项的索引位置
- list.insert(index, obj) 将对象插入列表
- list.pop(obj=list[-1]) 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
- list.remove(obj) 移除列表中某个值的第一个匹配项
- list.reverse() 反向列表中元素
- list.sort([func]) 对原列表进行排序
字符串内建函数
方法 | 描述 |
string.capitalize() | 把字符串的第一个字符大写 |
string.count(str,beg=0,end=len(string)) | 返回str在string里面出现的次数,如果beg或者end指定则返回指定范围内str出现的次数 |
string.endswith(obj,beg=0,end=len(string)) | 检查字符串是否以obj结束,如果beg或者end指定则检查指定的范围内是否以obj结束,如果是,返回True,否则返回False. |
string.expandtabs(tabsize=8) | 把字符串string中的tab符号转为空格,tab符号默认的空格数是8。 |
string.find(str,beg=0,end=len(string)) | 检测str是否包含在string中,如果beg和end指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回-1 |
string.index(str,beg=0,end=len(string)) | 跟find()方法一样,只不过如果str不在string中会报一个异常. |
string.isalnum() | 如果string至少有一个字符并且所有字符都是字母或数字则返回True,否则返回False |
string.isalpha() | 如果string至少有一个字符并且所有字符都是字母则返回True,否则返回False |
string.isdigit() | 如果string只包含数字则返回True否则返回False. |
string.islower() | 如果string中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回True,否则返回False |
string.isnumeric() | 如果string中只包含数字字符,则返回True,否则返回False |
string.isspace() | 如果string中只包含空格,则返回True,否则返回False. |
string.isupper() | 如果string中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回True,否则返回False |
string.join(seq) | 以string作为分隔符,将seq中所有的元素(的字符串表示)合并为一个新的字符串 |
string.ljust(width) | 返回一个原字符串左对齐,并使用空格填充至长度width的新字符串 |
string.lower() | 转换string中所有大写字符为小写. |
string.lstrip() | 截掉string左边的空格 |
max(str) | 返回字符串str中最大的字母。 |
min(str) | 返回字符串str中最小的字母。 |
string.partition(str) | 有点像find()和split()的结合体,从str出现的第一个位置起,把字符串string分成一个3元素的元组 (string_pre_str,str,string_post_str),如果string中不包含str则string_pre_str==string. |
string.replace(str1,str2,num=string.count(str1)) | 把string中的str1替换成str2,如果num指定,则替换不超过num次. |
string.rfind(str,beg=0,end=len(string)) | 类似于find()函数,不过是从右边开始查找. |
string.rindex(str,beg=0,end=len(string)) | 类似于index(),不过是从右边开始. |
string.rjust(width) | 返回一个原字符串右对齐,并使用空格填充至长度width的新字符串 |
string.rpartition(str) | 类似于partition()函数,不过是从右边开始查找. |
string.rstrip() | 删除string字符串末尾的空格. |
string.split(str="",num=string.count(str)) | 以str为分隔符切片string,如果num有指定值,则仅分隔num个子字符串 |
string.splitlines(num=string.count('\n')) | 按照行分隔,返回一个包含各行作为元素的列表,如果num指定则仅切片num个行. |
string.startswith(obj,beg=0,end=len(string)) | 检查字符串是否是以obj开头,是则返回True,否则返回False。如果beg和end指定值,则在指定范围内检查. |
string.strip([obj]) | 在string上执行lstrip()和rstrip() |
string.swapcase() | 翻转string中的大小写 |
string.istitle() | 如果string是标题化的(见title())则返回True,否则返回False |
string.title() | 返回"标题化"的string,就是说所有单词都是以大写开始,其余字母均为小写(见istitle()) |
string.translate(str,del="") | 根据str给出的表(包含256个字符)转换string的字符,要过滤掉的字符放到del参数中 |
string.upper() | 转换string中的小写字母为大写 |
string.zfill(width) | 返回长度为width的字符串,原字符串string右对齐,前面填充0 |
File(文件) 方法
file 对象使用 open 函数来创建,下表列出了 file 对象常用的函数:
file的方法 | 描述 |
close() | 关闭文件。关闭后文件不能再进行读写操作。 |
flush() | 刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。 |
fileno() | 返回一个整型的文件描述符(filedescriptorFD整型), 可以用在如os模块的read方法等一些底层操作上。 |
isatty() | 如果文件连接到一个终端设备返回True,否则返回False。 |
next() | 返回文件下一行。 |
read([size]) | 从文件读取指定的字节数,如果未给定或为负则读取所有。 |
readline([size]) | 读取整行,包括"\n"字符。 |
readlines([sizehint]) | 读取所有行并返回列表,若给定sizeint>0,返回总和大约为sizeint字节的行, 实际读取值可能比sizhint较大,因为需要填充缓冲区。 |
seek(offset[,whence]) | 设置文件当前位置 |
tell() | 返回文件当前位置。 |
truncate([size]) | 截取文件,截取的字节通过size指定,默认为当前文件位置。 |
write(str) | 将字符串写入文件,没有返回值。 |
writelines(sequence) | 向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。 |
字典内置方法
- radiansdict.clear() 删除字典内所有元素
- radiansdict.copy() 返回一个字典的浅复制
- radiansdict.fromkeys() 创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值
- radiansdict.get(key, default=None) 返回指定键的值,如果值不在字典中返回default值
- radiansdict.has_key(key) 如果键在字典dict里返回true,否则返回false
- radiansdict.items() 以列表返回可遍历的(键, 值) 元组数组
- radiansdict.keys() 以列表返回一个字典所有的键
- radiansdict.setdefault(key, default=None) 和get() 类似,但如果键不存在于字典中,将会添加键并将值设为default
- radiansdict.update(dict2) 把字典dict2的键/值对更新到dict里
- radiansdict.values() 以列表返回字典中的所有值
随机数
- import random
- random.randrange ([start,] stop [,step])
- random.random()
数学函数
- abs(x) 返回数字的绝对值,如abs(-10) 返回 10
- cmp(x, y) 如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1
- fabs(x) 返回数字的绝对值,如math.fabs(-10) 返回10.0
- max(x1, x2,...) 返回给定参数的最大值,参数可以为序列。
- min(x1, x2,...) 返回给定参数的最小值,参数可以为序列。
- sqrt(x) 返回数字x的平方根,数字可以为负数,返回类型为实数,如math.sqrt(4)返回 2+0j
Time 模块
Time 模块包含了以下内置函数,既有时间处理相的,也有转换时间格式的:
序号 | 函数及描述 |
---|---|
1 | time.altzone 返回格林威治西部的夏令时地区的偏移秒数。如果该地区在格林威治东部会返回负值(如西欧,包括英国)。对夏令时启用地区才能使用。 |
2 | time.asctime([tupletime]) 接受时间元组并返回一个可读的形式为"Tue Dec 11 18:07:14 2008"(2008年12月11日周二18时07分14秒)的24个字符的字符串。 |
3 | time.clock( ) 用以浮点数计算的秒数返回当前的CPU时间。用来衡量不同程序的耗时,比time.time()更有用。 |
4 | time.ctime([secs]) 作用相当于asctime(localtime(secs)),未给参数相当于asctime() |
5 | time.gmtime([secs]) 接收时间辍(1970纪元后经过的浮点秒数)并返回格林威治天文时间下的时间元组t。注:t.tm_isdst始终为0 |
6 | time.localtime([secs]) 接收时间辍(1970纪元后经过的浮点秒数)并返回当地时间下的时间元组t(t.tm_isdst可取0或1,取决于当地当时是不是夏令时)。 |
7 | time.mktime(tupletime) 接受时间元组并返回时间辍(1970纪元后经过的浮点秒数)。 |
8 | time.sleep(secs) 推迟调用线程的运行,secs指秒数。 |
9 | time.strftime(fmt[,tupletime]) 接收以时间元组,并返回以可读字符串表示的当地时间,格式由fmt决定。 |
10 | time.strptime(str,fmt='%a %b %d %H:%M:%S %Y') 根据fmt的格式把一个时间字符串解析为时间元组。 |
11 | time.time( ) 返回当前时间的时间戳(1970纪元后经过的浮点秒数)。 |
12 | time.tzset() 根据环境变量TZ重新初始化时间相关设置。 |
Time模块包含了以下2个非常重要的属性:
序号 | 属性及描述 |
---|---|
1 |
time.timezone 属性time.timezone是当地时区(未启动夏令时)距离格林威治的偏移秒数(>0,美洲;<=0大部分欧洲,亚洲,非洲)。 |
2 |
time.tzname 属性time.tzname包含一对根据情况的不同而不同的字符串,分别是带夏令时的本地时区名称,和不带的。 |
- 日期处理
- #!/usr/bin/python
- # -*- coding: UTF-8 -*-
- import time; # 引入time模块
- import calendar;
- ticks = time.time()
- print ("time_t:", int(ticks))
- localtime = time.localtime(int(ticks))
- print ("localtime :", localtime)
- # 格式化成2016-05-12 20:47:50形式
- print (time.strftime("%Y-%m-%d %H:%M:%S", localtime))
- # 格式化成Thu May 12 20:47:50 2016形式
- strlocaltime = time.strftime("%a %b %d %H:%M:%S %Y", localtime)
- print (strlocaltime)
- # 将格式字符串转换为时间戳
- print (time.mktime(time.strptime(strlocaltime,"%a %b %d %H:%M:%S %Y")))
- # print (calendar.month(2016, 1))
结果:
- time_t: 1463057682
- localtime : time.struct_time(tm_year=2016, tm_mon=5, tm_mday=12, tm_hour=20, tm_min=54, tm_sec=42, tm_wday=3, tm_yday=133, tm_isdst=0)
- 2016-05-12 20:54:42
- Thu May 12 20:54:42 2016
- 1463057682.0
python标准异常
异常名称 | 描述 |
---|---|
BaseException | 所有异常的基类 |
SystemExit | 解释器请求退出 |
KeyboardInterrupt | 用户中断执行(通常是输入^C) |
Exception | 常规错误的基类 |
StopIteration | 迭代器没有更多的值 |
GeneratorExit | 生成器(generator)发生异常来通知退出 |
StandardError | 所有的内建标准异常的基类 |
ArithmeticError | 所有数值计算错误的基类 |
FloatingPointError | 浮点计算错误 |
OverflowError | 数值运算超出最大限制 |
ZeroDivisionError | 除(或取模)零 (所有数据类型) |
AssertionError | 断言语句失败 |
AttributeError | 对象没有这个属性 |
EOFError | 没有内建输入,到达EOF 标记 |
EnvironmentError | 操作系统错误的基类 |
IOError | 输入/输出操作失败 |
OSError | 操作系统错误 |
WindowsError | 系统调用失败 |
ImportError | 导入模块/对象失败 |
LookupError | 无效数据查询的基类 |
IndexError | 序列中没有此索引(index) |
KeyError | 映射中没有这个键 |
MemoryError | 内存溢出错误(对于Python 解释器不是致命的) |
NameError | 未声明/初始化对象 (没有属性) |
UnboundLocalError | 访问未初始化的本地变量 |
ReferenceError | 弱引用(Weak reference)试图访问已经垃圾回收了的对象 |
RuntimeError | 一般的运行时错误 |
NotImplementedError | 尚未实现的方法 |
SyntaxError | Python 语法错误 |
IndentationError | 缩进错误 |
TabError | Tab 和空格混用 |
SystemError | 一般的解释器系统错误 |
TypeError | 对类型无效的操作 |
ValueError | 传入无效的参数 |
UnicodeError | Unicode 相关的错误 |
UnicodeDecodeError | Unicode 解码时的错误 |
UnicodeEncodeError | Unicode 编码时错误 |
UnicodeTranslateError | Unicode 转换时错误 |
Warning | 警告的基类 |
DeprecationWarning | 关于被弃用的特征的警告 |
FutureWarning | 关于构造将来语义会有改变的警告 |
OverflowWarning | 旧的关于自动提升为长整型(long)的警告 |
PendingDeprecationWarning | 关于特性将会被废弃的警告 |
RuntimeWarning | 可疑的运行时行为(runtime behavior)的警告 |
SyntaxWarning | 可疑的语法的警告 |
UserWarning | 用户代码生成的警告 |
正则表达式在python中的应用
正则表达式修饰符- 可选标志
正则表达式可以包含一些可选标志修饰符来控制匹配的模式。修饰符被指定为一个可选的标志。多个标志可以通过按位 OR(|) 它们来指定。如 re.I | re.M 被设置成 I 和 M 标志:
修饰符 | 描述 |
---|---|
re.I | 使匹配对大小写不敏感 |
re.L | 做本地化识别(locale-aware)匹配 |
re.M | 多行匹配,影响 ^ 和 $ |
re.S | 使 . 匹配包括换行在内的所有字符 |
re.U | 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B. |
re.X | 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。 |
正则表达式模式
模式字符串使用特殊的语法来表示一个正则表达式:
字母和数字表示他们自身。一个正则表达式模式中的字母和数字匹配同样的字符串。
多数字母和数字前加一个反斜杠时会拥有不同的含义。
标点符号只有被转义时才匹配自身,否则它们表示特殊的含义。
反斜杠本身需要使用反斜杠转义。
由于正则表达式通常都包含反斜杠,所以你最好使用原始字符串来表示它们。模式元素(如 r'/t',等价于'//t')匹配相应的特殊字符。
下表列出了正则表达式模式语法中的特殊元素。如果你使用模式的同时提供了可选的标志参数,某些模式元素的含义会改变。
模式 | 描述 |
---|---|
^ | 匹配字符串的开头 |
$ | 匹配字符串的末尾。 |
. | 匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符。 |
[...] | 用来表示一组字符,单独列出:[amk] 匹配 'a','m'或'k' |
[^...] | 不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。 |
re* | 匹配0个或多个的表达式。 |
re+ | 匹配1个或多个的表达式。 |
re? | 匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式 |
re{ n} | 精确匹配n个前面表达式 |
re{ n,} | 精确匹配至少n个前面表达式。 |
re{ n, m} | 匹配 n 到 m 次由前面的正则表达式定义的片段,贪婪方式 |
a| b | 匹配a或b |
(re) | G匹配括号内的表达式,也表示一个组 |
(?imx) | 正则表达式包含三种可选标志:i, m, 或 x 。只影响括号中的区域。 |
(?-imx) | 正则表达式关闭 i, m, 或 x 可选标志。只影响括号中的区域。 |
(?: re) | 类似 (...), 但是不表示一个组 |
(?imx: re) | 在括号中使用i, m, 或 x 可选标志 |
(?-imx: re) | 在括号中不使用i, m, 或 x 可选标志 |
(?#...) | 注释. |
(?= re) | 前向肯定界定符。如果所含正则表达式,以 ... 表示,在当前位置成功匹配时成功,否则失败。但一旦所含表达式已经尝试,匹配引擎根本没有提高;模式的剩余部分还要尝试界定符的右边。 |
(?! re) | 前向否定界定符。与肯定界定符相反;当所含表达式不能在字符串当前位置匹配时成功 |
(?> re) | 匹配的独立模式,省去回溯。 |
\w | 匹配字母数字 |
\W | 匹配非字母数字 |
\s | 匹配任意空白字符,等价于 [\t\n\r\f]. |
\S | 匹配任意非空字符 |
\d | 匹配任意数字,等价于 [0-9]. |
\D | 匹配任意非数字 |
\A | 匹配字符串开始 |
\Z | 匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串。c |
\z | 匹配字符串结束 |
\G | 匹配最后匹配完成的位置。 |
\b | 匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。 |
\B | 匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。 |
\n, \t, 等. | 匹配一个换行符。匹配一个制表符。等 |
\1...\9 | 匹配第n个分组的子表达式。 |
\10 | 匹配第n个分组的子表达式,如果它经匹配。否则指的是八进制字符码的表达式。 |
正则表达式实例
字符匹配
实例 | 描述 |
---|---|
python | 匹配 "python". |
字符类
实例 | 描述 |
---|---|
[Pp]ython | 匹配 "Python" 或 "python" |
rub[ye] | 匹配 "ruby" 或 "rube" |
[aeiou] | 匹配中括号内的任意一个字母 |
[0-9] | 匹配任何数字。类似于 [0123456789] |
[a-z] | 匹配任何小写字母 |
[A-Z] | 匹配任何大写字母 |
[a-zA-Z0-9] | 匹配任何字母及数字 |
[^aeiou] | 除了aeiou字母以外的所有字符 |
[^0-9] | 匹配除了数字外的字符 |
特殊字符类
实例 | 描述 |
---|---|
. | 匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用象 '[.\n]' 的模式。 |
\d | 匹配一个数字字符。等价于 [0-9]。 |
\D | 匹配一个非数字字符。等价于 [^0-9]。 |
\s | 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。 |
\S | 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。 |
\w | 匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。 |
\W | 匹配任何非单词字符。等价于 '[^A-Za-z0-9_]'。 |
re.match函数
re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。
re.search方法
re.search 扫描整个字符串并返回第一个成功的匹配。
- 1
- print("match: ",re.match('www', 'www.163.com').span()) # 在起始位置匹配
- print("match: ",re.match('com', 'www.163.com')) # 不在起始位置匹配
- print("search: ",re.search('www', 'www.163.com').span()) # 在起始位置匹配
- print("search: ",re.search('com', 'www.163.com').span()) # 不在起始位置匹配
- matchObj = re.match( r'(.*) are (.*?) .*', "Cats are smarter than dogs", re.M|re.I) #?是为了group(2)不会带上than
- if matchObj:
- print ("matchObj.group() : ", matchObj.group())
- print ("matchObj.group(1) : ", matchObj.group(1))
- print ("matchObj.group(2) : ", matchObj.group(2))
- else:
- print ("No match!!")
- match: (0, 3)
- match: None
- search: (0, 3)
- search: (8, 11)
- matchObj.group() : Cats are smarter than dogs
- matchObj.group(1) : Cats
- matchObj.group(2) : smarter
- 2
- phone = "2004-959-559 # This is Phone Number"
- # Delete Python-style comments
- print ("Phone Num : ", re.sub(r' #.*$', "**", phone))
- # Remove anything other than digits
- print ("Phone Num : ", re.sub(r'\D', ".", phone))
- print ("Phone Num : ", re.sub(r'\D', "", phone))
- Phone Num : 2004-959-559**
- Phone Num : 2004.959.559.......................
- Phone Num : 2004959559
Python 网络编程
- serv:
- #!/usr/bin/env python
- # -*- coding: UTF-8 -*-
- #python2.7
- import socket # 导入 socket 模块
- s = socket.socket() # 创建 socket 对象
- host = socket.gethostname() # 获取本地主机名
- port = 12345 # 设置端口
- s.bind((host, port)) # 绑定端口
- s.listen(5) # 等待客户端连接
- while True:
- c, addr = s.accept() # 建立客户端连接。
- print '连接地址:', addr
- c.send('欢迎访问菜鸟教程!')
- c.close() # 关闭连接
- client:
- #!/usr/bin/env python
- # -*- coding: UTF-8 -*-
- #python2.7
- import socket # 导入 socket 模块
- s = socket.socket() # 创建 socket 对象
- host = socket.gethostname() # 获取本地主机名
- port = 12345 # 设置端口好
- s.connect((host, port))
- print s.recv(1024)
- s.close()
Python SMTP发送邮件
https://www.runoob.com/python/python-email.html
第三方 SMTP 服务
- #!/usr/bin/python
- # -*- coding: UTF-8 -*-
- import smtplib
- from email.mime.text import MIMEText
- from email.header import Header
- # 第三方 SMTP 服务
- mail_host="mail.asiainfo.com" #设置服务器
- mail_user="liaohw" #用户名
- mail_pass=raw_input("Please input password : ") #口令
- sender = 'liaohw@asiainfo.com'
- receivers = ['liaohw@foxmail.com'] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱
- message = MIMEText('Python send mail...', 'plain', 'utf-8')
- message['From'] = Header("Admin")
- message['To'] = Header("MyTester")
- message['Subject'] = Header("Hello My Lord")
- try:
- smtpObj = smtplib.SMTP()
- smtpObj.connect(mail_host, 25) # 25 为 SMTP 端口号
- smtpObj.login(mail_user,mail_pass)
- smtpObj.sendmail(sender, receivers, message.as_string())
- print "Send mail ok!"
- except smtplib.SMTPException:
- print "Error: Send mail failed!"
推荐阅读
-
有多少人按@萧井陌大神给出的Python+Flask路线找到工作了?
-
python结合selenium获取XX省交通违章数据的实现思路及代码
-
微信公众平台/ Python2与Python3中hashlib的sha1结果不一致
-
浅谈Python类的__getitem__和__setitem__特殊方法
-
使用python调用腾讯AI开放平台手写体OCR的API
-
python接入萤石云HLS直播流(海康威视摄像头4g连接条件下)
-
python错误:AttributeError: 'module' object has no attribute 's
-
python用Pygal如何生成漂亮的SVG图像详解
-
详解python 发送邮件实例代码
-
Python中强大的命令行库click入门教程