Python学习——模块的基本知识
http://www.cnblogs.com/alex3714/articles/5161349.html
更加推荐这个路径:
https://www.cnblogs.com/wupeiqi/articles/4963027.html
# 定义
# 模块:用来从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能),本质就
# 是.py结尾的python文件(文件名:test.py,对应的模块名:test)
# 包:用来从逻辑上组织模块的,本质就一个目录(必须带有一个_init.py文件)
# 2.导入方法
# import module name
# import moduleI name,module2 name
# from module alex import*-
# from modulealex import ml,m2,m3
# from module_alex import logger as logger_alex 如果重复的话,可以用这个
#
# 特别需要注意的几个:
# sys.path 现在Python会读的几个目录名。
# os.path.dirname( ) 获取当前的目录名
# os.path.abspath(__file__) 这个是绝对目录,里面的__file__是当前文件的意思
# . 这个就是当前目录和linux一样的。
#
#
# 3.import本质(路径搜索和搜索路径)
# 导入模块的本质就是把python文件解释一遍
# (import test test='test.py all code'
# (from test import name name='code')
# import module_name-->module_name.py---->module_name.py的路径-->sys.path
# 导入包的本质就是执行该包下的_init.py文件。所以可以在__init__里面加入 比如 from . import 某个模块名
# 这样的方式,来预先解释包里面的某个模块,从而使得模块可以使用。
# 4.导入优化
# from 模块 import 函数名
# 简单优化一下。
# 5.标注库
# 1.time与datetime
# strftime("格式",struct time)--->“格式化的字符串"
# strptime(“格式化的字符事”,“格式")->struct_time
# >>>time.strftime("%m:%d %H:%M:%S %Y",x)#%Y:x.tm_year %m:x.tm_mon
# '2016-08:2014:31:52'
# >>>time.strptime('2016-08:20 14:31:52',"%Y-%m:%S %H:%M:%d")
# time.struct_time(tm_year=2016,tm_mon=8,tm_mday=20,tm hour=14,tm min
# yday=233,tm_isdst=-1)
# x.tm_year=2016
# 最重要的是:获取目前的标准时间。
# time.asctime(time.localtime()) 元祖为变量
# # time.ctime(time.time()) 时间戳为变量
# import datetime
# datetime模块需要注意的东西
关键: datetime.datetime.today().strftime("%Y%m%d") //输出”20210521”
# n = datetimt.datetime.now() 当前时间,非常见格式 ,为datetime对象
# datetime.datetime.now().ctime() 显示常见格式。
# k = datetime.timedelta(minutes=20,hours==2,days=2) 计算时间间隔用。
# two_day_2_hours_20_min_later = n + k
# two_day_2_hours_20_min_later.ctime()
可以参考以下网页:
https://blog.csdn.net/u011250186/article/details/103972471
# 2.random模块
# import random
# random.random() 出现0-1的随机数
# random.randint(2,6) 随机在出现2-6的整数,含有6
# random.randrange(2,6) 随机出现2-6,不含有6的整数;range是顾前不顾后的。
# random.choice([13,4,2,5]) 从列表中中随机选一个
# l = [1,2,3,4,5,6,7]
# random.shuffle(l) 打乱列表顺序。
#
#
#
# 操作系统进行调用的接口
# os.getcwd()获取当前工作自录,即当前python脚本工作的目录路径
# os.chdir("dirname")改变当前脚本工作目录;相当于she11下cd
# os.curdir 返回当前目录('.')
# os.pardir获取当前目录的父目泉字符串名:('..'')
# os.makedirs('dirname1/dirname2') 递归地创建目录
# os.remove('dirname')
# os.mkdir('dicname') 生成单极目录
# os.rmdir(“dirname')删除单级空目录,若自录不为空则无法删除,报错;相当于shel1中rmdir dirnane
# os.1istdir('dirname”)列出指定目录下的所有文件和子目录,包括隐蒸文件,并以列表方式打印
# os.remove()T 删除一个文件
# os.renane("oldname","newname")重命名文件/目录
# os.sep 输出操作系统特定的路径分隔符,win下为“\\”,Linux下为/”
# os.1inesep 输出当前平台使用的行终止符,win下为\t\n”,Linux下为“\n”
# os.pathsep 输出用于分割文件路径的字符串
# os.name 输出字符串指示当前使用平台。'win->nt';'Linux->posix'
# os.system("bash command")运行she11命令,直接显示
# os.path.abspath(path) 返回path规英化的绝对路径
# os.path.split(poth)将path分制成目录和文件名一元组返回高,A
# os.path.dirname(path)返国ath的国易:其容多就名高R品上地::P考式(9理营))现吸家参适简全值。B即os.path.split(path)的
# os.path.basename(path).返回path最后的文件名,如果没有文件名,则返回空值。
# os.path.isabs(path) 如果path是绝对路径,返回True
# os.path.isfile(path) path是一个存在的文件,返回true。否贝返false
# os.path.isdir(path) 如果path是个存存在的目录。返回true。否贝返false
# os.path.join(path[,path2,path3]) 将目录组合后返回,第一个必须是绝对路径,否则被忽略,自动下一个
# os.path.getatime(path) 获取目录的最近存取时间
# os.path.getmtime(path) 获取目录的最近更改时间。
import sys
#
# sys.argv 用于脚本外部直接传参数,命令行参数List,第一个元素是程序本身路径
# sys.exit(n) 退出程序,正常退出时exit(0)
# sys.version 获取Python解释程序的版本信息
# sys.maxint 最大的Int值
# sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
# sys.platform 返回操作系统平台名称
# sys.append()
# sys.stdout.write('please:')
# val = sys.stdin.readline()[:-1]
#
# shutil 模块
# shutil.copyfile(f1, f2) 将f1拷贝到f2中。
shelve 模块,就是一种存储的方式。
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()
六、shutil(来自wupeiqi)
高级的 文件、文件夹、压缩包 处理模块
shutil.copyfileobj(fsrc, fdst[, length])
将文件内容拷贝到另一个文件中,可以部分内容
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
shutil.copyfile(src, dst)
拷贝文件
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
shutil.copymode(src, dst)
仅拷贝权限。内容、组、用户均不变
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
shutil.copystat(src, dst)
拷贝状态的信息,包括:mode bits, atime, mtime, flags
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
shutil.copy(src, dst)
拷贝文件和权限
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
shutil.copy2(src, dst)
拷贝文件和状态信息
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
shutil.ignore_patterns(*patterns)
shutil.copytree(src, dst, symlinks=False, ignore=None)
递归的去拷贝文件
例如:copytree(source, destination, ignore=ignore_patterns('*.pyc', 'tmp*'))
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
shutil.rmtree(path[, ignore_errors[, onerror]])
递归的去删除文件
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
shutil.move(src, dst)
递归的去移动文件
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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对象
1
2
3
4
5
6
7
8
9
|
#将 /Users/wupeiqi/Downloads/test 下的文件打包放置当前程序目录 import shutil ret = shutil.make_archive( "wwwwwwwwww" , 'gztar' , root_dir = '/Users/wupeiqi/Downloads/test' ) #将 /Users/wupeiqi/Downloads/test 下的文件打包放置 /Users/wupeiqi/目录 import shutil ret = shutil.make_archive( "/Users/wupeiqi/wwwwwwwwww" , 'gztar' , root_dir = '/Users/wupeiqi/Downloads/test' ) |
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
shutil 对压缩包的处理是调用 ZipFile 和 TarFile 两个模块来进行的,详细:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
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() |
六、shutil
高级的 文件、文件夹、压缩包 处理模块
shutil.copyfileobj(fsrc, fdst[, length])
将文件内容拷贝到另一个文件中,可以部分内容
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
shutil.copyfile(src, dst)
拷贝文件
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
shutil.copymode(src, dst)
仅拷贝权限。内容、组、用户均不变
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
shutil.copystat(src, dst)
拷贝状态的信息,包括:mode bits, atime, mtime, flags
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
shutil.copy(src, dst)
拷贝文件和权限
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
shutil.copy2(src, dst)
拷贝文件和状态信息
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
shutil.ignore_patterns(*patterns)
shutil.copytree(src, dst, symlinks=False, ignore=None)
递归的去拷贝文件
例如:copytree(source, destination, ignore=ignore_patterns('*.pyc', 'tmp*'))
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
shutil.rmtree(path[, ignore_errors[, onerror]])
递归的去删除文件
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
shutil.move(src, dst)
递归的去移动文件
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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对象
1
2
3
4
5
6
7
8
9
|
#将 /Users/wupeiqi/Downloads/test 下的文件打包放置当前程序目录 import shutil ret = shutil.make_archive( "wwwwwwwwww" , 'gztar' , root_dir = '/Users/wupeiqi/Downloads/test' ) #将 /Users/wupeiqi/Downloads/test 下的文件打包放置 /Users/wupeiqi/目录 import shutil ret = shutil.make_archive( "/Users/wupeiqi/wwwwwwwwww" , 'gztar' , root_dir = '/Users/wupeiqi/Downloads/test' ) |
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
shutil 对压缩包的处理是调用 ZipFile 和 TarFile 两个模块来进行的,详细:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
七: json模块
这个模块的作用就是将字典或者列表这种非字符串的数据转化为格式化的字符串; 不需要人工去转化;
只需要会2个简单的function:
转化为字符串: json.dumps(XX) ##XX 是常见的非函数的字典,数组等等类型
转化为原有的数据类型:json.loads(XX)
import json info = { 'name':'bb', 'age':11, 'func':"aa" } info1 = [1,2,3,4, info] f = open("test.text","w") print(type(info1)) print(type(json.dumps(info1))) f.write(json.dumps(info1)) # f.write( pickle.dumps( info) ) # f.close()
import pickle, json f = open("test.text","r") data = json.loads(f.read()) print(data["func"])