python-day5
2016-02-27 14:38
561 查看
python的学习进入了第五天,感觉越来越力不从心了。。。特别是作业环节,因为本身不是编程出身,写的本来就少,常常面对作业有种不知从何下手的感觉,这样的感觉越强烈,完成作业的愿望就越低,工作也越来越忙了,希望自己不会落下的太多吧。。
正则的深入
本周对于正则表达式做了更近一步的学习
1.compile的使用方法
配置match的方法,筛选出,输入的字符串中需要进行匹配的字段
2.使用正则来匹配IP地址的例子
使用正则通过每个.之间的数字进行IP地址的匹配,这个例子比较简单,并没有对每个数字的大小进行判断(大于255时不能作为IP地址)
冒泡排序法
算法之一的冒泡排序法,通过对一端无序的数组的排序,将数组从小到大进行排序的一种方法
通过代码可以看到,简单的思路为将数组中的前后2个数字进行比较,如果前一个数字大于后一个数字,则交换2个数字的位置,如果前一个数字小于后一个数字,则不交换2个数字的位置,继续使用大的数字和后一个数字进行比较,直到最大的数值被放到数组的最后一个位置上为止,然后在外部再进行一个大的循环,对内部的数字比较循环进行重复
模块模块是python中非常重要的一个内容,模块可以是内置的,也可以是第三方的,更可以是由用户自行定义的
1.模块的引用
在Python中用关键字import来引入某个模块,比如要引用模块math,就可以在文件最开始的地方用import math来引入。在调用math模块中的函数时,必须这样引用:
模块名.函数名
为什么必须加上模块名这样调用呢?因为可能存在这样一种情况:在多个模块中含有相同名称的函数,此时如果只是通过函数名来调用,解释器无法知道到底要调用哪个函数。所以如果像上述这样引入模块的时候,调用函数必须加上模块名。
有时候我们只需要用到模块中的某个函数,只需要引入该函数即可,此时可以通过语句
from 模块名 import 函数名1,函数名2....
来实现,当然可以通过不仅仅可以引入函数,还可以引入一些常量。通过这种方式引入的时候,调用函数时只能给出函数名,不能给出模块名,但是当两个模 块中含有相同名称函数的时候,后面一次引入会覆盖前一次引入。也就是说假如模块A中有函数function( ),在模块B中也有函数function( ),如果引入A中的function在先、B中的function在后,那么当调用function函数的时候,是去执行模块B中的function函 数。
如果想一次性引入math中所有的东西,还可以通过from math import *来实现,但是不建议这么做。
2.定义自己的模块
在Python中,每个Python文件都可以作为一个模块,模块的名字就是文件的名字。
比如有这样一个文件test.py,在test.py中定义了函数add:
那么在其他文件中就可以先import test,然后通过test.add(a,b)来调用了,当然也可以通过from test import add来引入
Time模块
作为一个时间模块,time模块的用处还是很广泛的
以上都是data模块中,几个比较常用的方法
DataTime模块
datatime模块
以上都是datatime模块中比较常用的方法
Random模块
random模块,也就是随机模块,在我们编写验证码时候使用的较多
以上的代码例子,就是一个混合了数字和字母的4位验证码的生成例子
[b]OS模块[/b]
OS模块是系统模块
SYS模块
[b] json和pickle模块
[/b]
使用json/pickle可以对数据进行一个持久化的操作,方便2个程序或者2台主机之间,对同一个数据进行再次处理
正则的深入
本周对于正则表达式做了更近一步的学习
1.compile的使用方法
import re p = re.compile("[0-9]") m = p.match('14534Abc') print(m.group()) 输出结果:1
配置match的方法,筛选出,输入的字符串中需要进行匹配的字段
2.使用正则来匹配IP地址的例子
string ='192.168.22.222' m = re.match('([0-9]{1,3}\.){3}\d{1,3}',string) print(m.group()) 输出结果:192.168.22.222
使用正则通过每个.之间的数字进行IP地址的匹配,这个例子比较简单,并没有对每个数字的大小进行判断(大于255时不能作为IP地址)
冒泡排序法
算法之一的冒泡排序法,通过对一端无序的数组的排序,将数组从小到大进行排序的一种方法
data = [10,4,33,21,54,3,8,11,5,22,2,1,17,13,6] a = 1 while a < len(data): for i in range(len(data)-a): if data[i] > data[i+1]: tmp = data[i+1] data[i+1] = data[i] data[i] = tmp a += 1 print(data) 输出结果:[1, 2, 3, 4, 5, 6, 8, 10, 11, 13, 17, 21, 22, 33, 54]
通过代码可以看到,简单的思路为将数组中的前后2个数字进行比较,如果前一个数字大于后一个数字,则交换2个数字的位置,如果前一个数字小于后一个数字,则不交换2个数字的位置,继续使用大的数字和后一个数字进行比较,直到最大的数值被放到数组的最后一个位置上为止,然后在外部再进行一个大的循环,对内部的数字比较循环进行重复
模块模块是python中非常重要的一个内容,模块可以是内置的,也可以是第三方的,更可以是由用户自行定义的
1.模块的引用
在Python中用关键字import来引入某个模块,比如要引用模块math,就可以在文件最开始的地方用import math来引入。在调用math模块中的函数时,必须这样引用:
模块名.函数名
为什么必须加上模块名这样调用呢?因为可能存在这样一种情况:在多个模块中含有相同名称的函数,此时如果只是通过函数名来调用,解释器无法知道到底要调用哪个函数。所以如果像上述这样引入模块的时候,调用函数必须加上模块名。
import math #这样会报错 print sqrt(2) #这样才能正确输出结果 print math.sqrt(2)
有时候我们只需要用到模块中的某个函数,只需要引入该函数即可,此时可以通过语句
from 模块名 import 函数名1,函数名2....
来实现,当然可以通过不仅仅可以引入函数,还可以引入一些常量。通过这种方式引入的时候,调用函数时只能给出函数名,不能给出模块名,但是当两个模 块中含有相同名称函数的时候,后面一次引入会覆盖前一次引入。也就是说假如模块A中有函数function( ),在模块B中也有函数function( ),如果引入A中的function在先、B中的function在后,那么当调用function函数的时候,是去执行模块B中的function函 数。
如果想一次性引入math中所有的东西,还可以通过from math import *来实现,但是不建议这么做。
2.定义自己的模块
在Python中,每个Python文件都可以作为一个模块,模块的名字就是文件的名字。
比如有这样一个文件test.py,在test.py中定义了函数add:
#test.py def add(a,b): return a+b
那么在其他文件中就可以先import test,然后通过test.add(a,b)来调用了,当然也可以通过from test import add来引入
Time模块
作为一个时间模块,time模块的用处还是很广泛的
import time print(time.clock()) 输出结果:4.0160463362501726e-06 print(time.process_time()) 输出结果:0.0625 print(time.time()) 输出结果:1456557871.6721685 print(time.ctime()) 输出结果:Sat Feb 27 15:24:31 2016 print(time.ctime(time.time()-86640)) 输出结果:Fri Feb 26 15:20:31 2016 print(time.ctime(21312414)) 输出结果:Sat Sep 5 00:06:54 1970 print(time.gmtime()) 输出结果:time.struct_time(tm_year=2016, tm_mon=2, tm_mday=27, tm_hour=7, tm_min=24, tm_sec=31, tm_wday=5, tm_yday=58, tm_isdst=0) print(time.localtime()) 输出结果:time.struct_time(tm_year=2016, tm_mon=2, tm_mday=27, tm_hour=15, tm_min=24, tm_sec=31, tm_wday=5, tm_yday=58, tm_isdst=0) a = time.localtime() print(a.tm_year) 输出结果:2016 print(a.tm_mon) 输出结果:2 print(time.localtime(time.time())) 输出结果:time.struct_time(tm_year=2016, tm_mon=2, tm_mday=27, tm_hour=15, tm_min=24, tm_sec=31, tm_wday=5, tm_yday=58, tm_isdst=0) print(time.mktime(time.localtime())) 输出结果:1456557871.0 print(time.gmtime()) 输出结果:time.struct_time(tm_year=2016, tm_mon=2, tm_mday=27, tm_hour=7, tm_min=24, tm_sec=31, tm_wday=5, tm_yday=58, tm_isdst=0) print(time.strftime('%Y-%m-%d %H:%M:%S')) 输出结果:2016-02-27 15:24:31 print(time.strptime('2016-5-30 10:50:06','%Y-%m-%d %H:%M:%S')) 输出而结果:time.struct_time(tm_year=2016, tm_mon=5, tm_mday=30, tm_hour=10, tm_min=50, tm_sec=6, tm_wday=0, tm_yday=151, tm_isdst=-1)
以上都是data模块中,几个比较常用的方法
DataTime模块
datatime模块
import datetime,time print(datetime.date.today()) 输出结果:2016-02-27 print(datetime.date.fromtimestamp(1234568)) 输出结果:1970-01-15 print(datetime.datetime.now()) 输出结果:2016-02-27 15:17:01.181719 a = datetime.datetime.now() print(a.timetuple()) 输出结果:time.struct_time(tm_year=2016, tm_mon=2, tm_mday=27, tm_hour=15, tm_min=17, tm_sec=1, tm_wday=5, tm_yday=58, tm_isdst=-1) print(a.replace(2015,5)) 输出结果:2015-05-27 15:17:01.181719 a = datetime.datetime.now() new = a + datetime.timedelta(seconds=-10) print(new) 输出结果:2016-02-27 15:16:51.212736
以上都是datatime模块中比较常用的方法
Random模块
random模块,也就是随机模块,在我们编写验证码时候使用的较多
import random check_code = "" for i in range(4): a = random.randrange(4) if a != i: temp = chr(random.randrange(65,90)) else: temp = random.randrange(0,10) check_code += str(temp) print(check_code) 输出结果:2G31 HHPF 8R6H
以上的代码例子,就是一个混合了数字和字母的4位验证码的生成例子
[b]OS模块[/b]
OS模块是系统模块
os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录;相当于shell下cd os.curdir 返回当前目录: ('.') os.pardir 获取当前目录的父目录字符串名:('..') os.makedirs('dirname1/dirname2') 可生成多层递归目录 os.removedirs('dirname1') 删除空的目录,或多级空目录 os.mkdir('dirname') 生成单级目录;相当于shell中mkdir dirname os.rmdir('dirname') 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印 os.remove() 删除一个文件 os.rename("oldname","newname") 重命名文件/目录,或者移动,相当于shell命令mv os.stat('path/filename') 获取文件/目录信息 os.sep 输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/" os.linesep 输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n" os.pathsep 输出用于分割文件路径的字符串 os.name 输出字符串指示当前使用平台。win->'nt'; Linux->'posix' os.system("bash command") 运行shell命令,直接显示,只是单个shell命令的执行 os.environ 获取系统环境变量 os.path.abspath(path) 返回path规范化的绝对路径 os.path.split(path) 将path分割成目录和文件名二元组返回 os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素 os.path.basename(path) 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素 os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False os.path.isabs(path) 如果path是绝对路径,返回True os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略 os.path.getatime(path) 返回path所指向的文件或者目录的最后存取时间 os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间
SYS模块
sys.argv 命令行参数List,第一个元素是程序本身路径 sys.exit(n) 退出程序,正常退出时exit(0) sys.version 获取Python解释程序的版本信息 sys.maxint 最大的Int值 sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值 sys.platform 返回操作系统平台名称
[b] json和pickle模块
[/b]
json:用于处理字符串和python数据类型间的转换 pickle:用于处理python特有类型和python数据类型间的转换
json模块提供了四个功能:dumps、dump、loads、load json在所有的语言中都通用,存取的直接字符 pickle模块提供了四个功能:dumps、dump、loads、load 在python中独有一个模块,存取二进制字符 不仅仅可以序列化简单的字符、列表、字典,还能序列化函数、类以至于整个程序
import pickle import json def login(func): print('000') f = open('test.txt','wb') info = { 'Zero':'123', 'Jack':'456', 'Min':'789', 'Su':login } print(pickle.dumps(info)) f.write(pickle.dumps(info)) f.close()
使用json/pickle可以对数据进行一个持久化的操作,方便2个程序或者2台主机之间,对同一个数据进行再次处理
相关文章推荐
- python的paramiko源码修改了一下,写了个操作命令的日志审计 bug修改
- python程序运行总是有invalid syntax 错误 如何解决?
- Python基础(一)之Python简介
- Python标准库:内置函数classmethod(function)
- 树莓派安装 python3 及 python IDE
- 我的Python成长之路---第六天---Python基础(19)---2016年2月20日(晴)
- Python学习笔记(四) 多重继承及内部算法解析
- Python开发qq批量登陆
- Python Matplotlib 中文乱码
- Python collections.defaultdict() 与 dict的使用和区别
- python-Day5
- 《笨办法学Python》 第46课手记
- leetcode第20题——*Valid Parentheses
- python sklearn包——grid search笔记
- Py2exe的使用
- Python正则表达式指南
- Python爬虫
- Python学习笔记(2)
- Python的函数参数传递:传值?引用?
- python sklearn包——3.1cross validation笔记