您的位置:首页 > 编程语言 > Python开发

python-day5

2016-02-27 14:38 561 查看
python的学习进入了第五天,感觉越来越力不从心了。。。特别是作业环节,因为本身不是编程出身,写的本来就少,常常面对作业有种不知从何下手的感觉,这样的感觉越强烈,完成作业的愿望就越低,工作也越来越忙了,希望自己不会落下的太多吧。。

正则的深入

本周对于正则表达式做了更近一步的学习

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台主机之间,对同一个数据进行再次处理


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: