一、模块

模块的本质就是一个.py 文件。

导入和调用模块:

import module

from module import xx

from module.xx.xx import xx as rename  

from module.xx.xx import *

模块调用时发生了三件事:

import 
1.创建名称空间
2.执行模块文件
3.在执行文件中创建一个名称 指向模块的名称空间
from
1.创建名称空间
2.执行模块文件
3.把模块中的名称复制到当前名称空间

注意:模块一旦被调用,即相当于执行了另外一个py文件里的代码

python中有三种模块:
1. 内置模块(内置于解释器中,不用导入,直接调用)
2. 第三方模块(在lib目录下,导入后可以调用)
3. 自定义模块(默认从当前工作目录下导入,导入后可以调用)
python解释器对于模块的查找也是遵循上面的顺序。python模块丰富,后期涉及到的网络编程和线程进程,基本就是在学socket 和threading processing 这两个模块

相对导入和绝对导入

绝对导入的定义

从sys.path开始的完整路径称之为绝对导入
我们会发现
1.如果你的包的层级比较复杂 写起来很长
2.假如有一天 你需要修改包名 你需要将所有导入语句全改一遍
为了解决这两个问题 我们最好使用相对导入

相对导入的定义

相对于被导入模块的路径
语法 .表示当前目录 ..当前往上一级目录 ...上上级 以此类推
注意:建议不要超过三层
相对导入只能用于 包的内部模块之间相互导入

二、包

包也是一种模块

对于使用者而言 使用方式和模块没有任何区别

本质上就是一个文件夹 不同之处在于 多了一个__init__.py 叫包的初始化文件。

在导入包的时候 由于包实际上是一个文件夹 不能被执行 所以包中需要提供__init__.py文件

该文件用于代表这个包

所以上面import pack 实际上时执行了pack下的__init___.py 导入了这个名称

那么问题来了,__init__.py 的作用是什么?

__init__.py文件的作用? ******
说白了就是导入该包下的所有模块 这样一来使用包的人 用起来非常简单 无需关心包中的文件结构
只要导入了包 就能使用包中的所有功能
__init__.py 应该包含什么内容?
不应该包含任何的业务逻辑 仅仅用于导入包中的模块

导入语法:

pack.sayhello()
pack.m1.sayhi()
pack.sayhi()
pack.pack.m1

三、常用模块汇总

Time & Datetime 模块

Time模块:

三种表示方式:

1、时间戳

2、格式化的时间字符串

3、元组(struct_time)共九个元素。

三种形式之间的转换:

结构化>>>时间戳:
time.mktime(time.localtime())
时间戳>>>结构化:
time.localtime() 默认传入当前时间戳。

结构化>>>字符串:
time.strftime('%Y-%m-%d, time.localtime())
字符串>>>结构化:
time.strptime('2016-06-21', '%Y-%m-%d')

另外两外两种转化字符串时间的方法: (老外习惯用的时间表示法)

time.asctime() 默认把当前结构时间转化为字符串

time.ctime() 默认把当前时间戳转化为字符串

time.sleep() 睡眠。其实是一种I/O阻塞(类似的,input也是一种I/O阻塞,阻塞时,CPU会被调度到其它任务,因此不占CPU的)

Datetime模块

#时间加减
import datetime # print(datetime.datetime.now()) #返回 -- ::03.941925
#print(datetime.date.fromtimestamp(time.time()) ) # 时间戳直接转成日期格式 如2018--
# print(datetime.datetime.now() )
# print(datetime.datetime.now() + datetime.timedelta()) #当前时间+3天
# print(datetime.datetime.now() + datetime.timedelta(-)) #当前时间-3天
# print(datetime.datetime.now() + datetime.timedelta(hours=)) #当前时间+3小时
# print(datetime.datetime.now() + datetime.timedelta(minutes=)) #当前时间+30分 # c_time = datetime.datetime.now()
# print(c_time.replace(minute=,hour=)) #时间替换

Random模块(生成随机字符串)

比如登录网站的随机验证码,通过random模块可以很容易生成随机字符串随机数生成的模块

常用的语法操作如下:

>>> random.randrange(,) #返回1-10之间的一个随机数,不包括10
>>> random.randint(,) #返回1-10之间的一个随机数,包括10 >>> random.randrange(, , ) #随机选取0到100间的偶数 >>> random.random() #返回一个随机浮点数
>>> random.choice('abce3#$@1') #返回一个给定数据集合中的随机字符 >>> random.sample('abcdefghij',) #从多个字符中选取特定数量的字符
['a', 'd', 'b'] #洗牌
>>> a
[, , , , , , , , , ]
>>> random.shuffle(a)
>>> a
[, , , , , , , , , ]

小练习:

生成随机字符串

>>> import string
>>> ''.join(random.sample(string.ascii_lowercase + string.digits, ))
'4fvda1'

sys模块(解释器相关信息的模块)

sys.argv           命令行参数List,第一个元素是程序本身路径
sys.exit(n) 退出程序,正常退出时exit()
sys.version 获取Python解释程序的版本信息
sys.maxint 最大的Int值
sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform 返回操作系统平台名称
sys.stdout.write('please:') #标准输出 , 引出进度条的例子, 注,在py3上不行,可以用print代替
val = sys.stdin.readline()[:-] #标准输入
sys.getrecursionlimit() #获取最大递归层数
sys.setrecursionlimit() #设置最大递归层数
sys.getdefaultencoding() #获取解释器默认编码
sys.getfilesystemencoding #获取内存数据存到文件里的默认编码

os模块(与操作系统相关、对文件的处理、对路径的处理)

常用语法操作:

不带path:

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 获取系统环境变量 带path:
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) #方式二:不推荐使用
os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

shutil模块(用于操作文件、包括压缩和解压)

shutil.copyfileobj(fsrc, fdst[, length])
将文件内容拷贝到另一个文件中

import shutil
shutil.copyfileobj(open('old.xml','r'), open('new.xml', 'w'))

shutil.copyfile(src, dst)
拷贝文件

shutil.copyfile('f1.log', 'f2.log') #目标文件无需存在

shutil.copymode(src, dst)
仅拷贝权限。内容、组、用户均不变

shutil.copymode('f1.log', 'f2.log') #目标文件必须存在

shutil.copystat(src, dst)
仅拷贝状态的信息,包括:mode bits, atime, mtime, flags

shutil.copystat('f1.log', 'f2.log') #目标文件必须存在

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

import shutil
shutil.copy('f1.log', 'f2.log')

shutil.copy2(src, dst)
拷贝文件和状态信息

import shutil
shutil.copy2('f1.log', 'f2.log')

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

import shutil
shutil.copytree('folder1', 'folder2', ignore=shutil.ignore_patterns('*.pyc', 'tmp*')) #目标目录不能存在,注意对folder2目录父级目录要有可写权限,ignore的意思是排除

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

import shutil
shutil.rmtree('folder1')

shutil.move(src, dst)
递归的去移动文件,它类似mv命令,其实就是重命名。


import shutil
shutil.move('folder1', 'folder3')

shutil.make_archive(base_name, format,...)
创建压缩包并返回文件路径,例如:zip、tar
创建压缩包并返回文件路径,例如:zip、tar

base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径,

如 data_bak =>保存至当前路径
如:/tmp/data_bak =>保存至/tmp/

format: 压缩包种类,“zip”, “tar”, “bztar”,“gztar”

root_dir: 要压缩的文件夹路径(默认当前目录)

owner: 用户,默认当前用户

group: 组,默认当前组

logger: 用于记录日志,通常是logging.Logger对象

#将 /data 下的文件打包放置当前程序目录
import shutil
ret = shutil.make_archive("data_bak", 'gztar', root_dir='/data') #将 /data下的文件打包放置 /tmp/目录
import shutil
ret = shutil.make_archive("/tmp/data_bak", 'gztar', root_dir='/data') 若想放在指定目录,在文件前加上指定目录的位置即可。

shutil 对压缩包的处理是调用 ZipFile 和 TarFile 两个模块来进行的,详细:

zipfile压缩&解压缩


import zipfile

# 压缩
z = zipfile.ZipFile('laxi.zip', 'w')
z.write('a.log')
z.write('data.data')
z.close()
# 解压
z = zipfile.ZipFile('laxi.zip', 'r')
z.extractall(path='.')
z.close()

tarfile压缩&解压缩


import tarfile

# 压缩
>>> t=tarfile.open('/tmp/egon.tar','w')
>>> t.add('/test1/a.py',arcname='a.bak')
>>> t.add('/test1/b.py',arcname='b.bak')
>>> t.close()

# 解压
>>> t=tarfile.open('/tmp/egon.tar','r')
>>> t.extractall('/egon')
>>> t.close()

 

模块、包及常用模块(time/random/os/sys/shutil)的更多相关文章

  1. Python常用模块(logging&re&时间&random&os&sys&shutil&序列化&configparser&&hashlib)

    一. logging(日志模块) 二 .re模块 三. 时间模块 四. random模块 五. os模块 六. sys模块 七. shutil模块 八. 序列化模块(json&pickle&a ...

  2. day19:常用模块(collections,time,random,os,sys)

    1,正则复习,re.S,这个在用的最多,re.M多行模式,这个主要改变^和$的行为,每一行都是新串开头,每个回车都是结尾.re.L 在Windows和linux里面对一些特殊字符有不一样的识别,re. ...

  3. python 常用模块之random,os,sys 模块

    python 常用模块random,os,sys 模块 python全栈开发OS模块,Random模块,sys模块 OS模块 os模块是与操作系统交互的一个接口,常见的函数以及用法见一下代码: #OS ...

  4. python笔记-1(import导入、time/datetime/random/os/sys模块)

    python笔记-6(import导入.time/datetime/random/os/sys模块)   一.了解模块导入的基本知识 此部分此处不展开细说import导入,仅写几个点目前的认知即可.其 ...

  5. 模块random+os+sys+json+subprocess

    模块random+os+sys+json+subprocess 1. random 模块   (产生一个随机值) import random 1 # 随机小数 2 print(random.rando ...

  6. 常用模块之 time,datetime,random,os,sys

    time与datetime模块 先认识几个python中关于时间的名词: 时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量.我们运行“ty ...

  7. day 5 模块导入、常用模块os shutil sys commands subprocess hashlib json pickle zipfile traceback random datetime

    os: os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录:相当于shell下cd os. ...

  8. 包及常用模块(time、datetime、random、sys)

    什么是包?‘ #官网解释 Packages are a way of structuring Python’s module namespace by using “dotted module nam ...

  9. 常用模块random/os/sys/time/datatime/hashlib/pymysql等

    一.标准模块 1.python自带的,import random,json,os,sys,datetime,hashlib等 ①.正常按照命令:打开cmd,执行:pip install rangdom ...

随机推荐

  1. react系列笔记1 用npx npm命令创建react app

    react系列笔记1 用npx npm命令创建react app create-react-app my-app是开始构建新的 React 单页应用程序的最佳方式.它已经为你设置好了开发环境,以便您可 ...

  2. java获取前一天时间SimpleDateFormat,java判断某个时间段

    java获取前一天时间SimpleDateFormat SimpleDateFormat predf = new SimpleDateFormat("yyyy-MM-dd"); D ...

  3. Icarscan VCI is definitely the update variation of Start iDiag

    Start iCarScan is alternative of Super X431 iDiag, it’ll make your Android smartphone or tablet righ ...

  4. Python读写docx文件

    Python读写word文档有现成的库可以处理.我这里采用 python-docx.可以用pip install python-docx安装一下. 这里说一句,ppt和excel也有类似的库哦,而且是 ...

  5. pat 团体赛练习题集 L2-006. 树的遍历

    给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列.这里假设键值都是互不相等的正整数. 输入格式: 输入第一行给出一个正整数N(<=30),是二叉树中结点的个数.第二行给出其后序遍历序 ...

  6. Tencent QQ现在就是一个十八层地狱下面的大恶魔-删除右键里的"通过QQ发送到"

    都是流氓软件, 有人推荐装什么管家什么助手来清除, 那就是请走一个流氓又引进另外一个流氓. 下面的注册表项直接手工删除 32位系统: windows Registry Editor Version 5 ...

  7. No module named scrapy 成功安装scrapy,却无法import的解决方法

    今天本来准备写一个Python的爬虫,然而使用pip安装了Scrapy之后,却无论如何也无法import,显示的结果总是ImportError: No module named Scrapy.网上查阅 ...

  8. 'root'@'127.0.0.1'没有grant privileges

    从另外一台服务器拷贝了个mysql实例过来,给root@'%'授权的时候提示ERROR 1045 (28000): Access denied for user 'root'@'localhost' ...

  9. vfio

    VFIO简介 Documentation/vfio.txt 还是不理解IOMMU.北桥.PCI的MMIO和ioremap file:///C:/Users/shaohefe/Downloads/vt- ...

  10. 转:网卡、光纤网卡、ISCSI卡有什么区别?

    网卡.光纤网卡.ISCSI卡有什么区别? 感谢: http://www.it.com.cn/f/server/063/6/241650.htm 在讨论这个问题的时候,需要先说清楚一个问题:我们知道,在 ...