引言

  时间过的好快呀,终于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之路------标准库,正则表达式的更多相关文章

  1. Python OS模块标准库的系统接口及操作方法

    Python OS模块标准库的系统接口及操作方法 os.name 返回当前操作系统名,定义了'posix','nt','mac','os2','ce','java'(我使用win7/python3.1 ...

  2. 自学Python之路

    自学Python之路[第一回]:初识Python    1.1 自学Python1.1-简介    1.2 自学Python1.2-环境的搭建:Pycharm及python安装详细教程    1.3  ...

  3. 自学Python之路-Python核心编程

    自学Python之路-Python核心编程 自学Python之路[第六回]:Python模块       6.1 自学Python6.1-模块简介    6.2 自学Python6.2-类.模块.包  ...

  4. 自学Python之路-Python基础+模块+面向对象+函数

    自学Python之路-Python基础+模块+面向对象+函数 自学Python之路[第一回]:初识Python    1.1 自学Python1.1-简介    1.2 自学Python1.2-环境的 ...

  5. 自学Python之路-django

    自学Python之路-django 自学Python之路[第一回]:1.11.2 1.3

  6. 自学Python之路-Python并发编程+数据库+前端

    自学Python之路-Python并发编程+数据库+前端 自学Python之路[第一回]:1.11.2 1.3

  7. 自学Python之路-Python网络编程

    自学Python之路-Python网络编程 自学Python之路[第一回]:1.11.2 1.3

  8. Python内置模块与标准库

    Python内置模块就是标准库(模块)吗?或者说Python的自带string模块是内置模块吗? 答案是:string不是内置模块,它是标准库.也就是说Python内置模块和标准库并不是同一种东西. ...

  9. NO.3:自学python之路------集合、文件操作、函数

    引言 本来计划每周完成一篇Python的自学博客,由于上一篇到这一篇遇到了过年.开学等杂事,导致托更到现在.现在又是一个新的学期,春天也越来越近了(冷到感冒).好了,闲话就说这么多.开始本周的自学Py ...

随机推荐

  1. Java并发编程--2.synchronized

    前言 synchronized关键字是互斥锁,也称为内部锁 每个对象都有自己的monitor(锁标记),它是为了分配给线程,最多一个线程可以拥有对象的锁 使用 synchronized修饰成员方法,锁 ...

  2. leetcode 217. Contains Duplicate 287. Find the Duplicate Number 442. Find All Duplicates in an Array 448. Find All Numbers Disappeared in an Array

    后面3个题都是限制在1-n的,所有可以不先排序,可以利用巧方法做.最后两个题几乎一模一样. 217. Contains Duplicate class Solution { public: bool ...

  3. 20165302 2017-2018-2《Java程序设计》课程总结

    20165302 2017-2018-2<Java程序设计>课程总结 每周作业汇总 预备作业1 对师生关系的看法 预备作业2 C语言基础调查 预备作业3 安装虚拟机,初步学习虚拟机及常用命 ...

  4. 阿里开源项目之Ant Design Pro

    本篇文章主要包含的内容有三个方面. 第一.Ant Design Pro简介; 第二.Ant Design Pro能做什么; 第三.初步使用; 我相信通过这三个方面的讲解能让你大概知道Ant Desig ...

  5. TCL函数“参数自动补全” 与 “help 信息显示”

    tcl 函数参数自动补全和 help 信息显示 在EDA tool 中使用命令时,命令的参数可以通过 tab 键自动补全,而且可以使用 -help 显示帮助信息,使用起来很方便: 那么我们自己编写的 ...

  6. cpu负载过高分析

    如何定位是哪个服务进程导致CPU过载,哪个线程导致CPU过载,哪段代码导致CPU过载? 步骤一.找到最耗CPU的进程 工具:top 方法: 执行top -c ,显示进程运行信息列表 键入P (大写p) ...

  7. Spring源码分析(十一)bean的加载

    摘要:本文结合<Spring源码深度解析>来分析Spring 5.0.6版本的源代码.若有描述错误之处,欢迎指正. 经过前面的分析,我们终于结束了对XML配置文件的解析,接下来将会面临更大 ...

  8. 将本地项目托管到github 并预览

    本地文件上传到github的步骤 1.先在github上建立一个仓库 2.将此仓库download 3.在此文件夹中git bash here 4.进行如下git操作 git git init git ...

  9. linux如何查看进程OOM killer

    基本概念: Linux 内核有个机制叫OOM killer(Out-Of-Memory killer),该机制会监控那些占用内存过大,尤其是瞬间很快消耗大量内存的进程,为了防止内存耗尽而内核会把该进程 ...

  10. CSS 学习路线(一)元素

    元素(element) 类型:替换和非替换元素 替换元素(replaced element): 用来替换元素内容的部分并非由文档内容直接显示. eg:img input 非替换元素(nonreplac ...