一 模块

模块:就是一组功能的集合体, 我们的程序可以直接导入模块来复用模块里的功能

导入方式 一般为 : import 模块名

在python中, 模块一般分为四个通用类别

1使用python编写.py 文件

、已被编译为共享库或DLL 的c 或c++扩展

3把一系列模块组织到一起的文件夹(注:文件夹下有一个__init__.py文件,该文件夹称之为包)

、使用c编写并链接到python解释器的内置模块

使用模块的优点:

1、从文件级别组织程序, 更方便管理

2、拿来主义, 提升开发效率

二 使用模块 import

导入模块 import

1:语法: import 模块名

2:在第一次导入模块时会做三件事,重复导入会直接引用内存中已经加载好的结果

、为源文件穿件新的名称空间,
、在新建的名称空间中执行模块中包含的代码。
、创建名字(模块名)来引用该名称空间

3:被导入的模块 有独立的名称空间

每个模块都是一个独立的名称空间, 定义在这个模块中的函数,把这个模块的名称空间当做全局名称空间, 这样我们在编写自己的模块时, 就不用担心我们定义在自己模块中全局变量会被导入时 , 与使用者的全局变量冲突。

4 为模块名起别名

为依据导入的模块起别人的方式对编写可扩展的代码很有用

import span as sm

5 在一行中导入多个模块   模块名中间用 “,” 分隔

import sys,os,re

三 使用模块 form.....import

1、from...import 的使用

 from 模块名 import  要读的read1,read2

2 、import  和from ....import   的对比

唯一区别就是:使用from。。import... 则是将spam 中的名字直接导入到当前的名称空间中, 所有在当前名称空间中, 直接使用名字就可以了, 无需加前缀 模块名

优点:使用起来方便了
缺点:容易与当前执行文件中的名字冲突

3、也支持重命名 as

 from spam import read1 as read

4、一行导入多个名字

from spam import read1,read2,money

5、 导入所有   from。。。。import *

#from spam import * 把spam中所有的不是以下划线(_)开头的名字都导入到当前位置

四:py 文件区分两种用途:模块与脚本

编写好的一个python文件 可以有两种途径:

一:脚本,一个文件就是整个程序,用来被执行
二 :模块,文件中存放着一堆功能,用来呗导入使用 #python为我们内置了全局变量__name__,
当文件被当做脚本执行时:__name__ 等于'__main__'
当文件被当做模块导入时:__name__等于模块名 #作用:用来控制.py文件在不同的应用场景下执行不同的逻辑
if __name__ == '__main__':

五:模块的搜索路径

模块的查找顺序:内存中已经加载的模块-->内置模块---->sys.path路径中包含的模块

包就是一个包含有__init__.py文件的文件夹,所以其实我们创建包的目的就是为了用文件夹将文件/模块组织起来

需要强调的是:

1、在python3中,即使包下没有__init__.py 文件,import包仍然不会报错,而python2中若是没有的话, 就会报错

2、创建包的目的不是为了运行, 而是被导入使用, 记住,包只是模块的一种形式而已,包的本质就是一种模块

一、包的使用之import

 import glance.db.models
glance.db.models.register_models('mysql')

二:包的使用之 from。。。import。。。

 from glance.db import models

强调:

、在导入时带点,  点的左边必须是一个包, 这是导入包特有的语法
、包内, 模块直接的导入应该使用from。。。import。。。
、from。。。import。。。。 import后必须是一个明确的名字, 没有任何的前缀。 from a.b.c.f import g.h.x # 这是错误的 #f 的左边必须是包
import后的名字不能有任何的前缀, 不能有 .

常用模块

一、time和datetime 模块

在python中通常有这几种方式来表达时间:

1:时间戳(timestamp):通常来说, 时间戳表示的是从1970年1月1日 00:00:00 开始按照秒计算的偏移量

2:格式化的时间字符串(Format String)

3:结构化的时间(struct_time):struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天,夏令时)

二、random模块

  import random

  print(random.random())#(,)----float    大于0且小于1之间的小数

  print(random.randint(,))  #[,]    大于等于1且小于等于3之间的整数

  print(random.randrange(,)) #[,)    大于等于1且小于3之间的整数

  print(random.choice([,'',[,]]))#1或者23或者[,]

 print(random.sample([,'',[,]],))#列表元素任意2个组合

 print(random.uniform(,))#大于1小于3的小数,如1. 

 item=[,,,,]
random.shuffle(item) #打乱item的顺序,相当于"洗牌"
print(item)

三: os 模块

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 输出用于分割文件路径的字符串 win下为;,Linux下为:
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所指向的文件或者目录的最后修改时间
os.path.getsize(path) 返回path的大小

os路径处理:

推荐使用:

import  os

import os,sys
possible_topdir = os.path.normpath(os.path.join(
os.path.abspath(__file__),
os.pardir, #上一级
os.pardir,
os.pardir
))
sys.path.insert(,possible_topdir)

四: sys模块

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

五  序列化:json&pickle

序列化:我们把对象(变量)从内存中编程可存储或传输的过程称之为序列化,在python中pickling.

序列化的优点

1:持久保存状态

2:跨平台数据交互  (其中pickle只能读取python文件,不能跨平台)

import json
import pickle

注意:json 不认单引号,

序列化:

序列化:
json。dumps(dic)
pickle.dumps(s) 反序列化:
json.loads()
pickle.loads()

六 hashlib 模块

1:hash:一种算法, 该算法接受传入的内容,经过运算得到一串 hash值

hash 值得特点是:

#只要传入的内容是一样的 得到的hash值必然一样。

#不能由hash值返解成内容 ===》把密码做成hash值,不应该在网络传输明文密码

#只要使用的hash算法不变, 无论小燕的内容多大, 得到的hash值长度是固定的

# import hashlib
#
# m=hashlib.md5()
# m.update('hello'.encode('utf-8'))
# m.update('world'.encode('utf-8'))
# m.update('egon'.encode('utf-8'))
# print(m.hexdigest()) #3801fab9b8c8d9fcb481017969843ed5

密码加盐

import  hashlib
pwd="alex12345" m=hashlib.me5()
m.update("一行白鹭上青天")
m.update(pwd.encode("utf-8"))
print(m.hexdigest())

七 re模块(正则)

正则就是用一些具有特殊含义的符号组合到一起(正则表达式)来描述字符或者字符串的方法。或者说正则就是 用来描述一列事物的规则。

在(python 它内嵌在python中, 并通过re模块来实现。

二 常用匹配模式(元字符)

 =================================匹配模式=================================
#一对一的匹配
# 'hello'.replace(old,new)
# 'hello'.find('pattern') #正则匹配
import re
#\w与\W
print(re.findall('\w','hello egon 123')) #['h', 'e', 'l', 'l', 'o', 'e', 'g', 'o', 'n', '', '', '']
print(re.findall('\W','hello egon 123')) #[' ', ' '] #\s与\S
print(re.findall('\s','hello egon 123')) #[' ', ' ', ' ', ' ']
print(re.findall('\S','hello egon 123')) #['h', 'e', 'l', 'l', 'o', 'e', 'g', 'o', 'n', '', '', ''] #\n \t都是空,都可以被\s匹配
print(re.findall('\s','hello \n egon \t 123')) #[' ', '\n', ' ', ' ', '\t', ' '] #\n与\t
print(re.findall(r'\n','hello egon \n123')) #['\n']
print(re.findall(r'\t','hello egon\t123')) #['\n'] #\d与\D
print(re.findall('\d','hello egon 123')) #['', '', '']
print(re.findall('\D','hello egon 123')) #['h', 'e', 'l', 'l', 'o', ' ', 'e', 'g', 'o', 'n', ' '] #\A与\Z
print(re.findall('\Ahe','hello egon 123')) #['he'],\A==>^
print(re.findall('123\Z','hello egon 123')) #['he'],\Z==>$ #^与$
print(re.findall('^h','hello egon 123')) #['h']
print(re.findall('3$','hello egon 123')) #[''] # 重复匹配:| . | * | ? | .* | .*? | + | {n,m} |
#.
print(re.findall('a.b','a1b')) #['a1b']
print(re.findall('a.b','a1b a*b a b aaab')) #['a1b', 'a*b', 'a b', 'aab']
print(re.findall('a.b','a\nb')) #[]
print(re.findall('a.b','a\nb',re.S)) #['a\nb']
print(re.findall('a.b','a\nb',re.DOTALL)) #['a\nb']同上一条意思一样 #*
print(re.findall('ab*','bbbbbbb')) #[]
print(re.findall('ab*','a')) #['a']
print(re.findall('ab*','abbbb')) #['abbbb'] #?
print(re.findall('ab?','a')) #['a']
print(re.findall('ab?','abbb')) #['ab']
#匹配所有包含小数在内的数字
print(re.findall('\d+\.?\d*',"asdfasdf123as1.13dfa12adsf1asdf3")) #['', '1.13', '', '', ''] #.*默认为贪婪匹配
print(re.findall('a.*b','a1b22222222b')) #['a1b22222222b'] #.*?为非贪婪匹配:推荐使用
print(re.findall('a.*?b','a1b22222222b')) #['a1b'] #+
print(re.findall('ab+','a')) #[]
print(re.findall('ab+','abbb')) #['abbb'] #{n,m}
print(re.findall('ab{2}','abbb')) #['abb']
print(re.findall('ab{2,4}','abbb')) #['abb']
print(re.findall('ab{1,}','abbb')) #'ab{1,}' ===> 'ab+'
print(re.findall('ab{0,}','abbb')) #'ab{0,}' ===> 'ab*' #[]
print(re.findall('a[1*-]b','a1b a*b a-b')) #[]内的都为普通字符了,且如果-没有被转意的话,应该放到[]的开头或结尾
print(re.findall('a[^1*-]b','a1b a*b a-b a=b')) #[]内的^代表的意思是取反,所以结果为['a=b']
print(re.findall('a[0-9]b','a1b a*b a-b a=b')) #[]内的^代表的意思是取反,所以结果为['a=b']
print(re.findall('a[a-z]b','a1b a*b a-b a=b aeb')) #[]内的^代表的意思是取反,所以结果为['a=b']
print(re.findall('a[a-zA-Z]b','a1b a*b a-b a=b aeb aEb')) #[]内的^代表的意思是取反,所以结果为['a=b'] #\# print(re.findall('a\\c','a\c')) #对于正则来说a\\c确实可以匹配到a\c,但是在python解释器读取a\\c时,会发生转义,然后交给re去执行,所以抛出异常
print(re.findall(r'a\\c','a\c')) #r代表告诉解释器使用rawstring,即原生字符串,把我们正则内的所有符号都当普通字符处理,不要转义
print(re.findall('a\\\\c','a\c')) #同上面的意思一样,和上面的结果一样都是['a\\c'] #():分组
print(re.findall('ab+','ababab123')) #['ab', 'ab', 'ab']
print(re.findall('(ab)+123','ababab123')) #['ab'],匹配到末尾的ab123中的ab
print(re.findall('(?:ab)+123','ababab123')) #findall的结果不是匹配的全部内容,而是组内的内容,?:可以让结果为匹配的全部内容
print(re.findall('href="(.*?)"','<a href="http://www.baidu.com">点击</a>'))#['http://www.baidu.com']
print(re.findall('href="(?:.*?)"','<a href="http://www.baidu.com">点击</a>'))#['href="http://www.baidu.com"'] #|
print(re.findall('compan(?:y|ies)','Too many companies have gone bankrupt, and the next one is my company'))

python 中 模块,包, 与常用模块的更多相关文章

  1. 学习Python必须要知道的常用模块

    在程序设计中,为完成某一功能所需的一段程序或子程序:或指能由编译程序.装配程序等处理的独立程序单位:或指大型软件系统的一部分.本文为你介绍了Python中的两种常用模块. os: 这个模块包含普遍的操 ...

  2. python自动化测试学习笔记-4常用模块

    常用模块 1.os 2.sys 3.random 4.string 5.time 6.hashlib 一.os模块 os模块主要用来操作文件.目录,与操作系统无关.要使用os模块首先要导入OS模块,用 ...

  3. Python学习之路13☞常用模块

    一 time模块 在Python中,通常有这几种方式来表示时间: 时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量.我们运行“type(t ...

  4. Python学习-第四节:常用模块-logging,re,time

    1:logging模块 import logging logging.debug('This is debug message') logging.info('This is info message ...

  5. Python中操作mysql的pymysql模块详解

    Python中操作mysql的pymysql模块详解 前言 pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同.但目前pymysql支持python3.x而后者不支持 ...

  6. python中的计时器:timeit模块

    python中的计时器:timeit模块 (1) timeit - 通常在一段程序的前后都用上time.time()然后进行相减就可以得到一段程序的运行时间,不过python提供了更强大的计时库:ti ...

  7. Python中的包ImportError

    前言 Python中的包给我提供了很好的代码组织,相似的功能模块放在同一个包内,不仅代码结构清晰,而且调用起来也比较方便(可以用*导入) 但是,我们在刚开始使用Python包的时候总是会遇到导入错误& ...

  8. python中引入包的时候报错AttributeError: module 'sys' has no attribute 'setdefaultencoding'解决方法?

    python中引入包的时候报错:import unittestimport smtplibimport timeimport osimport sysimp.reload(sys)sys.setdef ...

  9. Python【第五篇】模块、包、常用模块

    一.模块(Module) 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文 ...

  10. 关于python中的包,模块导入的问题详解(一)

    最近由于初学python,对包,模块的导入问题进行了资料的搜集,查阅,在这里做一个总结: 一: import 模块 在import的过程中发生了什么?我们用一个实验来说明: 以上截图表明:在impor ...

随机推荐

  1. Gson解析数组和list容器

    Gson解析数组和list容器 使用Gson解析首先须要增加架包文件:gson-2.2.4.jar 定义一个类Student: public class Student { String name=& ...

  2. 深入Garbage First垃圾收集器(三)G1中的垃圾收集

    G1 GC在收集暂停的过程中会回收绝大部分堆分区,唯一的例外是多级并发标记期间的清除阶段. 在清除阶段,如果G1遇到仅仅只存放了垃圾的分区,它就会立刻收集这些分区并将它们放回空闲分区列表中,因此这些分 ...

  3. MySQL 导入导出命令(转载)

    导出数据: mysqldump --databases -u root -p密码 数据库名> /root/guogl/XXX.sql 从sql文件导入数据: mysql -u root -p密码 ...

  4. 程序猿的量化交易之路(27)--Cointrader之PriceData价格数据(14)

    转载须注明出处:http://blog.csdn.net/minimicall?viewmode=contents,http://cloudtrade.top/ PriceData:价格数据.价格数据 ...

  5. Ahead-of-time compilation

    https://en.wikipedia.org/wiki/Ahead-of-time_compilation

  6. 使用 QWorker 做为计划任务引擎

    QWorker 提供了 Plan 函数来提供计划任务功能的支持.每个任务做为一个作业,可以在指定的时间点被触发执行.而 cron 作为 Linux 操作系统下计划任务的标准被广大用户所熟知,QWork ...

  7. Hibernate主要查询方式

    1.hql查询 1.1 无参数的hql查询 1.2 带参的hql查询(分为问号占位和字符占位两种) Ps: 绑定各种类型的参数时用setParameter()绑定参数,如封装方法后用不定参数时循环绑定 ...

  8. appium(6)-parts of appium api

    parts of appium api Lock Lock the screen.//锁屏. // java driver.lockScreen(3); // objective c [driver ...

  9. Centos7利用kvm搭建Windows虚拟机

    这几天玩了一下kvm虚拟化,真的很有意思,我把这几天踩的坑,还有收获,都记录下来,作为以后的复习和检查. 首先说一下我的基本逻辑,我有一台win7的笔记本,我的底层虚拟化是使用VMWare构建的Cen ...

  10. leetcode 790. Domino and Tromino Tiling

    We have two types of tiles: a 2x1 domino shape, and an "L" tromino shape. These shapes may ...