初学python之day5

一、python学习之模块:

1.模块的本质:

模块的本质就是用来从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能).py结尾的python文件

2.模块的使用方法:

import +文件名                  如:import test1                                              (文件名一定不要加.py)

导入多个文件则为 import+文件名,文件名         如import test1,test2

from test1 import *                                将test1模块的东西全部导入过来并执行一遍                       (建议不要使用)

from test1 import m1,m2,m3                   将test1模块中的m1,m2,m3分别导入

from test import logger as logger_alex      导入的模块名与当前的函数名相同,则可用as对导入的模块名重命名

3.导入的本质:

导入模块的本质就是把python文件解释一遍;

导入包的本质就是执行该包下的__init__.py文件;

4. 模块分类:

自定义模块

内置标准模块(标准库)
开源模块

4-1自定义模块

4-1-a.当前文件的绝对路径:

import os#导入os模块
dir = os.path.abspath(__file__)
print(dir)

4-1-b.当前文件的父级目录绝对路径:

import os#导入os模块
dir = os.path.dirname(os.path.abspath(__file__))
print(dir)

4-1-c.当前文件的父级目录的父级目录绝对路径:

import os #导入os模块
dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
print(dir)

4-1-d.如果模块和自己写的程序不在同一个目录下,则可以通过sys.path.append(路径)把模块的路径添加到程序中。

import os,sys

dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))#获取python目录的绝对路径
sys.path.append(dir)#讲python目录的路径添加到程序中
#-----想要快速找到该路径,则可使用insert将要添加的目录路径插入到path前面
# sys.path.insert(dir)
import old from read_new #导入read_new.py文件

#在当前路径下调用read_new.py里的某个函数,如user()
read_new.user()

4-2 内置标准模块

4-2-1 time&detetime 
时间相关的操作,时间有三种表示方式:
时间戳 1970年1月1日之后的秒,即:time.time()
格式化的字符串 2016-8-23 11:11, 即:time.strftime(‘%Y-%m-%d‘)
结构化时间 元组包含了:年、日、星期等.time.struct_time 即:time.localtime()

学习要点:

获取当前系统时间

print(time.ctime()) 

## 将字符串转换成日期格式

str_to_date = datetime.datetime.strptime("2016-02-01""%Y-%m-%d")

print(str_to_date)  # 输出=>2016-02-01 00:00:00

## 比现在快5天,(如果是慢5天用减号)

new_date = datetime.datetime.now() + datetime.timedelta(days=5)

print(new_date)

## 比现在快5小时(hours)

new_date = datetime.datetime.now() + datetime.timedelta(hours=10)

print(new_date)    

## 比现在快100秒(seconds)

new_date = datetime.datetime.now() + datetime.timedelta(seconds=120)

print(new_date)

4-2-2 random---生成随机数

import random
checkcode = ‘‘
for i in range(4):
  current = random.randrange(0,4)
  if current != i:
    temp = chr(random.randint(10,100))
  else:
    temp = random.randint(0,9)
  checkcode += str(temp)
print (checkcode)

4-2-3 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") 重命名文件/目录
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命令,直接显示
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所指向的文件或者目录的最后修改时间

4-2-4 sys模块

sys.argv 命令行参数List,第一个元素是程序本身路径
sys.exit(n) 退出程序,正常退出时exit(0)
sys.version 获取Python解释程序的版本信息
sys.maxint 最大的Int值
sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform 返回操作系统平台名称
sys.stdout.write(‘please:‘)
val = sys.stdin.readline()[:-1]

4-2-5 shutil模块----高级的 文件、文件夹、压缩包 处理模块

--1--shutil.copyfileobj(fsrc, fdst[, length])----
将文件内容拷贝到另一个文件中,可以部分内容

def copyfileobj(fsrc, fdst, length=16*1024):
"""copy data from file-like object fsrc to file-like object fdst"""
while 1:
buf = fsrc.read(length)
if not buf:
break
fdst.write(buf)

--2--shutil.copyfile(src, dst)----
拷贝文件:shutil.copyfile(src="D:\WorkSpace\day6\\test1.txt",dst="D:\WorkSpace\day6\\test2.txt")

--3-- shutil.copystat(src, dst)----

拷贝状态的信息,包括:mode bits, atime, mtime, flags

shutil.copystat(src=,dst=)

--4--shutil.copy(src, dst)-----
拷贝文件和权限

shutil.copy(src, dst)

--5--shutil.ignore_patterns(*patterns)
shutil.copytree(src, dst, symlinks=False, ignore=None)-----
递归的去拷贝文件

--6--shutil.rmtree(path[, ignore_errors[, onerror]])----
递归的去删除文件

--7--shutil.move(src, dst)----
递归的去移动文件

--8--shutil.make_archive(base_name, format,...)----

创建压缩包并返回文件路径,例如:zip、tar

base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径,
如:www =>保存至当前路径
如:/Users/wupeiqi/www =>保存至/Users/wupeiqi/
format: 压缩包种类,“zip”, “tar”, “bztar”,“gztar”
root_dir: 要压缩的文件夹路径(默认当前目录)
owner: 用户,默认当前用户
group: 组,默认当前组
logger: 用于记录日志,通常是logging.Logger对象

--9--shutil 对压缩包的处理是调用 ZipFile 和 TarFile 两个模块来进行的----

import zipfile

# 压缩
z = zipfile.ZipFile(‘test.zip‘, ‘w‘)
z.write(‘a.log‘)
z.write(‘data.data‘)
z.close()

# 解压
z = zipfile.ZipFile(‘laxi.zip‘, ‘r‘)
z.extractall()
z.close()

import tarfile

# 压缩
tar = tarfile.open(‘your.tar‘,‘w‘)
tar.add(‘WorkSpace/day5/test.zip‘, arcname=‘test.zip‘)
tar.add(‘WorkSpace/day5/test1.zip‘, arcname=‘test1.zip‘)
tar.close()

# 解压
tar = tarfile.open(‘your.tar‘,‘r‘)
tar.extractall() # 可设置解压地址
tar.close()

4-2-6 shelve模块

这个模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式。

import shelve

d = shelve.open(‘shelve_test‘) #打开一个文件

class Test(object):
def __init__(self,n):
self.n = n

t = Test(123)
t2 = Test(123334)

name = ["alex","rain","test"]
d["test"] = name #持久化列表
d["t1"] = t #持久化类
d["t2"] = t2

d.close()

4-2-7 xml

xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多

xml协议在各个语言里的都 是支持的,在python中可以用以下模块操作xml

import xml.etree.ElementTree as ET

# 解析xml文件
tree = ET.parse("test.xml")
# 获取根
root = tree.getroot()
print(root.tag)

# 遍历xml文档
for child in root:
print(child.tag, child.attrib)
for i in child:
print(i.tag, i.text)

# 只遍历year节点
for i in root.iter("year"):
print(i.tag, i.text)

# 修改和删除xml文件
tree = ET.parse("test2.xml")
root = tree.getroot()

二、 python学习之正则:

‘.‘ 默认匹配除\n之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行
‘^‘ 匹配字符开头,若指定flags MULTILINE,这种也可以匹配上(r"^a","\nabc\neee",flags=re.MULTILINE)
‘$‘ 匹配字符结尾,或e.search("foo$","bfoo\nsdfsf",flags=re.MULTILINE).group()也可以
‘*‘ 匹配*号前的字符0次或多次,re.findall("ab*","cabb3abcbbac") 结果为[‘abb‘, ‘ab‘, ‘a‘]
‘+‘ 匹配前一个字符1次或多次,re.findall("ab+","ab+cd+abb+bba") 结果[‘ab‘, ‘abb‘]
‘?‘ 匹配前一个字符1次或0次
‘{m}‘ 匹配前一个字符m次
‘{n,m}‘ 匹配前一个字符n到m次,re.findall("ab{1,3}","abb abc abbcbbb") 结果‘abb‘, ‘ab‘, ‘abb‘]
‘|‘ 匹配|左或|右的字符,re.search("abc|ABC","ABCBabcCD").group() 结果‘ABC‘
‘(...)‘ 分组匹配,re.search("(abc){2}a(123|456)c", "abcabca456c").group() 结果 abcabca456c
‘\A‘ 只从字符开头匹配,re.search("\Aabc","alexabc") 是匹配不到的
‘\Z‘ 匹配字符结尾,同$
‘\d‘ 匹配数字0-9
‘\D‘ 匹配非数字
‘\w‘ 匹配[A-Za-z0-9]
‘\W‘ 匹配非[A-Za-z0-9]
‘s‘ 匹配空白字符、\t、\n、\r , re.search("\s+","ab\tc1\n3").group() 结果 ‘\t‘

‘(?P<name>...)‘ 分组匹配 re.search("(?P<province>[0-9]{4})(?P<city>[0-9]{2})(?P<birthday>[0-9]{4})","371481199306143242").groupdict("city") 结果{‘province‘: ‘3714‘, ‘city‘: ‘81‘, ‘birthday‘: ‘1993‘}

    

时间: 2024-10-13 23:01:01

初学python之day5的相关文章

Python学习day5作业-ATM和购物商城

Python学习day5作业 Python学习day5作业 ATM和购物商城 作业需求 ATM: 指定最大透支额度 可取款 定期还款(每月指定日期还款,如15号) 可存款 定期出账单 支持多用户登陆,用户间转帐 支持多用户 管理员可添加账户.指定用户额度.冻结用户等 购物车: 商品信息- 数量.单价.名称 用户信息- 帐号.密码.余额 用户可充值 购物历史信息 允许用户多次购买,每次可购买多件 余额不足时进行提醒 用户退出时 ,输出当次购物信息 用户下次登陆时可查看购物历史 商品列表分级显示 1

初学 Python(十一)——切片

初学 Python(十一)--切片 初学 Python,主要整理一些学习到的知识点,这次是切片. #-*- coding:utf-8 -*- ''''' 切片 ''' L = ['name','age','sex','address','company'] #取前2个 print L[0:2] print L[:2] #取倒数第一个 print L[-1] #取后两个 print L[-2:] #取倒数第二个 print L[-2:-1] print len(L) #隔一个数取一次,从第一个数开

初学 Python(十三)——匿名函数

初学 Python,主要整理一些学习到的知识点,这次是匿名函数. # -*- coding:utf-8 -*- #关键字lambda定义的函数都是匿名函数 #做对象 f = lambda x,y:x+y print f(1,2) #做参 print reduce(lambda x,y:x+y,[1,2,3,4,5,6]) #做返回值 def build(x,y): return lambda:x*x+y*y g = build(1,2) print g print g()

初学Python

初学Python 1.Python初识 life is short you need python--龟叔名言 Python是一种简洁优美语法接近自然语言的一种全栈开发语言,由"龟叔"编写开发一种易学易懂高效的语言. Python提供丰富的接口和模块,便于使用其他语言细化,性能提升对要求较高的软件. 以上简单描述了一下Python语言的优点,缺点我就不写了,因为不需要对比,强大的语言自会解决现在几个劣势. 针对于初学者版本选择的问题,因为现在国内大多数在使用2.X版本,个人建议使用3.

【初学python】错误SSLError: [Errno 1] _ssl.c:504:的解决记录

最近在实习公司学习使用python做web自动化测试,其中使用到httplib这个模板,主要用于与待测试界面建立HTTP连接,发送数据请求,接收请求状态码和查询数据,验证功能.但是新版本的web界面改成使用https协议,原来的测试用例都变成无法跑通的状态. 将协议从HTTP改成HTTPS后,报以下错误: SSLError: [Errno 1] _ssl.c:504: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown proto

初学Python(九)——函数

初学Python(九)--函数 初学Python,主要整理一些学习到的知识点,这次是函数. 函数定义: # -*- coding:utf-8 -*- #函数的定义 def my_function(x): if x>0: return x elif x<0: return -x else: pass #函数的调用 a = my_function(-1) b = my_function(2) c = my_function(0) print a,b,c #空函数,pass为占位符 def empt

初学 Python(十四)——生成器

初学 Python(十四)--生成器 初学 Python,主要整理一些学习到的知识点,这次是生成器. # -*- coding:utf-8 -*- ''''' 生成式的作用: 减少内存占有,不用一次性 创建list中所有的元素,而 是在需要的时候创建 ''' #创建generator有2种方式 #第一种将列表表达式中的[]改为()即可 g = (x*x for x in range(10)) print g for n in g: print n #第二种,关键字yield def fab(ma

初学 Python(十二)——高阶函数

初学 Python(十二)--高阶函数 初学 Python,主要整理一些学习到的知识点,这次是高阶函数. #-*- coding:utf-8 -*- ''''' 话说高阶函数: 能用函数作为参数的函数 称为高阶函数 ''' #函数作参 def f(x): return x*x #map函数为内置函数,意思为将第二个参数的list作用到f函数中 #最后的结果为一个list print map(f,[1,2,3,4,5]) #reduce函数为内置函数,意思将第二参数的序列作用到add函数值 #将结

初学Python(八)——迭代

初学Python(八)——迭代 初学Python,主要整理一些学习到的知识点,这次是迭代. # -*- coding:utf-8 -*- from collections import Iterable ''''' 迭代 ''' L = ['af','st','at','psst','beta'] D = {1:'af',2:'st',3:'at',4:'psst',5:'beta'} S = 'helloworld' #数组 for item in L: print item #字典 for