NO.5:自学python之路------标准库,正则表达式
引言
时间过的好快呀,终于6级也考完了,学习Python的进度也得赶赶了。好的开始这一周的内容。
正文
模块
模块的本质就是‘.py’结尾的文件,它可以用来从逻辑上组织Python代码,它可以是变量、函数、类或者逻辑,主要用来实现某一个功能。如文件名为‘test.py’的模块,那么它的模块名就为‘test’。模块与包不同,包是用来从逻辑上组织文件的,包的本质就是一个目录,,但是必须带有一个名为‘__init__.py’的文件。模块的导入方法,例子。
import test
import
import某一个模块,其实就是将该模块文件中所有代码解释后赋值给模块名。它可以与from组合,例子。
from test import function
组合后的功能,其实就是将‘test.py’中的function部分取出,并执行。导入模块的本质就是将(sys.path搜索路径下的)某个Python文件解释一遍。导入包的本质就是解释包目录下的’__init__.py‘文件。
注意,在包下的’__init__.py‘文件中,直接使用import无法导入包内的模块。正确导入方法,例子。
#__init__.py
from . import test#从绝对路径下导入 #main.py
import package
package.test()#调用
分类
模块主要分为三类:标准库、开源模块和自定义模块。
标准库是Python为编程人员提供的库,可以直接导入调用使用。如os,sys等
开源模块是开发者开发的开源Python模块,可以从网络下载安装后使用。如numpy,pandas等
自定义模块是自己编程的模块。
下面将详细介绍一些常用的标准库。
time
时间的格式主要有三种:struc_time格式、时间戳格式以及固定格式化的格式。
import time
time.localtime()#UTC全国标准时间,struct_time格式
time.timezone#与标准时间的差值,时间戳格式,单位s
time.daylight#是否使用夏令时
time.sleep()#停几秒
time.gmtime()#时间戳转换为struct_time格式的UTC时间
time.localtime()#时间戳转换为struct_time格式的当前时区时间(UTC+8)
time.mktime()#struct_time格式转换为时间戳
time.strftime('%Y-%m-%d %H:%M:%S',x)%将struct_time转换为格式化字符串时间
time.strptime('2018-11-1 5:21:10','%Y-%m-%d %H:%M:%S')#将格式化时间转换为struct_time格式
time.asctime()#当前时间(默认)或结构化元组时间转换为英文显示
time.ctime()#当前时间(默认)或时间戳转换为英文显示
datatime
import datetime
datetime.datetime.now()#当前日期时间
datetime.datetime.now()-datetime.timedelta(3)#默认是天
datetime.datetime.now()-datetime.timedelta(hours=3)#3小时前
random
import random
random.random()#随机[0~1)之间的浮点数
random.randint(1,10)#[1~10]之间随机整数
random.randrange(1,10)#[1~10)之间随机整数
random.choice('hello word!')#从中随机取一个值
random.sample('hello word!',2)#从中随机取给定个数个
random.uniform(1,10)#[1~10]之间随机浮点数
x = [1,2,3,4,5]
random.shuffle(x)#x洗牌
os
import os
os.getcwd()#获取当前的目录
os.chdir(r'C:\user')#转移到其他目录
os.curdir#当前目录
os.pardir#上一级目录
os.makedirs(r'C:\a\b\c')#递归创建目录
os.removedirs(r'C:\a\b\c')#如果为空则递归到上层并删除
os.mkdir(r'C:\a\b\c')#不递归,创建目录
os.rmdir(r'C:\a\b\c')#不递归,删除目录
os.listdir('.')#当前目录下所有文件
os.remove()#删除一个文件
os.rename('oldname','newname')#重命名
os.stat(r'C:\a.jpg')#文件信息
os.sep#win下分割符为\\ linux下分割符为/
os.linesep#终止符win下分割符为\r\n linux下分割符为\n
os.pathsep#当前平台路径的分割符号 win;
os.name#当前系统名
os.system()#执行命令
os.environ#获取环境变量
os.path.abspath()#获取某个文件绝对路径
os.path.split()#将路径中的文件夹和文件名分割
os.path.dirname()#将路径中的文件夹和文件名分割后的目录名
os.path.basename()#将路径中的文件夹和文件名分割后的文件名
os.path.exists()#判断路径是否存在
os.path.isabs()#是否为绝对路径
os.path.isfile()#判断是否为文件
os.path.isdir()#判断是否为目录
os.path.join(r'C:',r'\a')#将多个路径组合返回
os.path.getatime()#获取文件最后的存取时间
os.path.getmtime()#获取文件最后的修改时间
sys
import sys
sys.argv#命令行参数list
sys.exit(n)#退出程序,0
sys.version#python版本信息
sys.path#搜索路径
sys.platform#操作系统平台名称
sys.stdout.write('please:')#可用于写进度条
shutil
import shutil#文件、文件夹、压缩包处理
shutil.copyfileobj(源文件对象,目标文件对象[,length])
f1,f2 = open('test1',encoding='utf-8'),open('test2','w',encoding='utf-8')
shutil.copyfileobj(f1,f2)
shutil.copyfile('test1','test2')
shutil.copystat('test1','test2')#复制文件状态和权限
shutil.copy('test1','test2')#复制文件和权限
shutil.copy2('test1','test2')#复制文件和状态
shutil.copytree('test1','test2')#递归复制,复制目录下所有文件
shutil.rmtree('test2')#递归删除,删除目录下所有文件
shutil.move('test1','test2')#递归的移动文件
shutil.make_archive('压缩包文件名或路径','压缩包种类zip,tar')
zipfile/tarfile
import zipfile
z = zipfile.ZipFile('test.zip','w')
z.write('test1.py')
z.close()
z = zipfile.ZipFile('test.zip','r')
z.extractall()
z.close()
shelve
import shelve#内存数据持久化模块
d = shelve.open('test')
class test(object):
def __init__(self,n):
self.n = n
t = test(123)
t2 = test(1233)
name = ['aa','bb','cc']
d['test'] = name #持久化列表
d['t1'] = t #持久化类
d['t2'] = t2
d.close()
d = shelve.open('test')#打开shelve
d.get('t1')#读出t1
configparser
import configparser#配置文档
#生成
config = configparser.ConfigParser()
config['DEFAULT'] = {'LALAL':'','AAFF':''
}
config['NEW'] = {}
with open('test.ini','w') as configfile:
config.write(configfile)
#读取
config = configparser.ConfigParser()
config.read('test.ini')
config.sections()#打印节点
config['new']['lala']
#删除
sec = conf.remove_section('NEW')
conf.write(open('test.ini','w'))
hashlib
import hashlib#hashlib用于加密,md5
m = hashlib.md5()
m.update(b'hello')
m.update(b'new')
print(m.hexdigest())#sha1\sha512\sha256....
hmac
import hmac
h = hmac.new(b'key','信息'.encode(encoding=utf-8))
print(h.digest())
print(h.hexdigest())
正则表达式re
import re
#匹配规则:
#'.'匹配除'\n'以外的任意字符,指定flag DOTALL可匹配任意字符;
#'^'匹配字符开头,指定flag MULTLTNE,可以匹配('a','\nabc\neee',flag=re.MULTILINE)
#'$'匹配结尾
#'*'匹配*前的字符0次或多次,re.findall('ab*','cabb3abcbaac')
#'+'匹配前一个字符一次或多次
#'?'匹配前一个字符1次或0次
#'{m}'匹配前一个字符m次
#'{n,m}'匹配前一个字符n到m次
#'|'匹配'|'左或右的字符
#'(...)'分组匹配
#'\A'只从字符开头匹配
#'\Z'匹配字符结尾
#'\d'匹配数字0~9
#'\D'匹配非数字
#'\w'匹配[A-Za-z0-9]
#'\w'匹配非[A-Za-z0-9]
#'\s'匹配空白字符、\t、\n、\r
re.search()#全局搜索,取到一个后返回
re.match()#从头搜索,取到一个后返回
re.findall()#取出全部后返回
re.split()#分割
re.sub()#替换
作业
Python字符串计算器
功能:
1.输入字符串,计算
2.括号,乘除,优先级
#-*- coding:utf-8 -*-
#author: Kai Zhang
#string calculation import re def mul(factor_1,factor_2):
'''乘法'''
value = float(factor_1) * float(factor_2)
return str(value) def div(factor_1,factor_2):
'''除法'''
value = float(factor_1) / float(factor_2)
return str(value) def add(factor_1,factor_2):
'''加法'''
value = float(factor_1) + float(factor_2)
return str(value) def sub(factor_1,factor_2):
'''减法'''
value = float(factor_1) - float(factor_2)
return str(value) def muldiv(formula):
'''计算所有乘除'''
formula = formula.replace('/*','/')
formula = formula.replace('*/','/')
muldiv_flag = True
while muldiv_flag:
inside = re.search('\d+\.?\d*[\*\/]-?\d+\.?\d*',formula)
if inside:
inside = inside.group()
number = re.findall('\d+\.?\d*',inside)
if '-' in inside:
number[1] = '-' + number[1]
if '*' in inside:
value = mul(number[0],number[1])
else:
value = div(number[0],number[1])
formula = formula.replace(inside,value)
else:
muldiv_flag = False
return formula def addsub(formula):
'''计算所有加减'''
formula = formula.replace('--','+')
formula = formula.replace('-+','-')
formula = formula.replace('+-','-')
formula = formula.replace('++','+')
if formula[0] == '-':
formula = ''+formula
addsub_flag = True
while addsub_flag:
inside = re.search('\d+\.?\d*[\+\-]\d+\.?\d*',formula)
if inside:
inside = inside.group()
print(inside)
number = re.findall('\d+\.?\d*',inside)
if '+' in inside:
value = add(number[0],number[1])
else:
value = sub(number[0],number[1])
formula = formula.replace(inside,value)
print(value)
else:
addsub_flag = False
return formula def calculat(formula):
'''开括号'''
bracket_flag = True
result = 0
while bracket_flag:
inside = re.search('\([\d\.\+\-\*\/]*\)',formula)
if inside:
inside = inside.group()
value = muldiv(inside.strip('()'))#去掉左右括号后计算乘除
value = addsub(value)#计算加减
formula = formula.replace(inside,value)
else:
bracket_flag = False
value = muldiv(formula)
result = addsub(value)#计算加减
return float(result) if __name__ == '__main__':
formula = input('请输入要计算的式子>>')
formula = re.sub('\s','',formula)#去掉空格
print('>>%f'%(eval(formula)))#展示正确结果
result = calculat(formula)#计算编程结果
print('>>%f'%(result))#展示编程结果
NO.5:自学python之路------标准库,正则表达式的更多相关文章
- Python OS模块标准库的系统接口及操作方法
Python OS模块标准库的系统接口及操作方法 os.name 返回当前操作系统名,定义了'posix','nt','mac','os2','ce','java'(我使用win7/python3.1 ...
- 自学Python之路
自学Python之路[第一回]:初识Python 1.1 自学Python1.1-简介 1.2 自学Python1.2-环境的搭建:Pycharm及python安装详细教程 1.3 ...
- 自学Python之路-Python核心编程
自学Python之路-Python核心编程 自学Python之路[第六回]:Python模块 6.1 自学Python6.1-模块简介 6.2 自学Python6.2-类.模块.包 ...
- 自学Python之路-Python基础+模块+面向对象+函数
自学Python之路-Python基础+模块+面向对象+函数 自学Python之路[第一回]:初识Python 1.1 自学Python1.1-简介 1.2 自学Python1.2-环境的 ...
- 自学Python之路-django
自学Python之路-django 自学Python之路[第一回]:1.11.2 1.3
- 自学Python之路-Python并发编程+数据库+前端
自学Python之路-Python并发编程+数据库+前端 自学Python之路[第一回]:1.11.2 1.3
- 自学Python之路-Python网络编程
自学Python之路-Python网络编程 自学Python之路[第一回]:1.11.2 1.3
- Python内置模块与标准库
Python内置模块就是标准库(模块)吗?或者说Python的自带string模块是内置模块吗? 答案是:string不是内置模块,它是标准库.也就是说Python内置模块和标准库并不是同一种东西. ...
- NO.3:自学python之路------集合、文件操作、函数
引言 本来计划每周完成一篇Python的自学博客,由于上一篇到这一篇遇到了过年.开学等杂事,导致托更到现在.现在又是一个新的学期,春天也越来越近了(冷到感冒).好了,闲话就说这么多.开始本周的自学Py ...
随机推荐
- Day5 类和对象
面向对象编程OOP 类:相似对象的集合. 对象 对象:实体.一切可以被描述的事物. 属性:特征. 方法:动作,行为. 类和对象的区别 [1]类时抽象的,对象是具体的. [2]类是一个模板,创建出来的对 ...
- Python pip常用指令
pip listpip list --outdatedpip list --outdated | grep Jinja2pip uninstall pycurlpip show pycurlpip i ...
- Sublime Text2中的快捷键一览表(Sublime 键盘快捷键大全 )
快捷键 功能 ctrl+shift+n 打开新Sublime ctrl+shift+w 关闭Sublime,关闭所有打开文件 ctrl+shift+t 重新打开最近关闭文件 ctrl+n 新建文件 c ...
- js遍历添加栏目类添加css 再点击其它删除css
//js遍历添加栏目类添加css 再点击其它删除css $(".radio-group .ckselect").each(function(index) { $(this).cli ...
- ThinkPHP5.1中数据查询使用field方法数组参数起别名时遇到的问题
首先数据库基本查询是没有问题的 <?php namespace app\index\controller; use think\Db; class Demo5 { //1.单条查询 public ...
- 日志工具——log4j
资料参考自:http://www.codeceo.com/article/log4j-usage.html 关于日志的基本概念以及从入门到实战,请参见:http://www.cnblogs.com/L ...
- RabbitMQ(三):消息持久化策略
原文:RabbitMQ(三):消息持久化策略 一.前言 在正常的服务器运行过程中,时常会面临服务器宕机重启的情况,那么我们的消息此时会如何呢?很不幸的事情就是,我们的消息可能会消失,这肯定不是我们希望 ...
- mfc 私有成员
知识点 类的私有成员private 访问类的私有成员 内联函数inline 一.类的私有成员 用private定义的(变量)或者(函数)只能在本类中使用其他类不能中不能调用: 用public定义的(变 ...
- mfc 类
知识点 类的概念 类的相关术语 定义类 使用类 一.类的概念 简单的说类就是数据与函数综合体,它是用户自定义类型. 二.类的相关术语 类的实例称为对象. 类在定义中隐式地包含数据和操作函数,这种思想称 ...
- tkinter的GUI设计:界面与逻辑分离(二)-- 菜单栏
由于要用到文件对话框和消息对话框,所以先给出下面的列表. py2 与 py3 中 tkinter 的变化: Tkinter → tkinter tkMessageBox → tkinter.messa ...