python常用模块part1
Posted zxcv1234
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python常用模块part1相关的知识,希望对你有一定的参考价值。
1. sys模块
sys模块包括了一组非常实用的服务,内含很多函数方法和变量,用来处理Python运行时配置以及资源,从而可以与前当程序之外的系统环境交互
1.1 sys.argv 在外部向程序传递参数
sys.argv[number]
- 1
- 2
一般情况下,number为0是这个脚本的名字,1,2…则为命令行下传递的参数
示例(在D:githubpycharmDevelopment有一个名字为classoop.py的python文件)
import sys
def testSys():
print(sys.argv[0])
print(‘The first arg is: ‘, sys.argv[1])
print(‘The second arg is: ‘, sys.argv[2])
testSys()
- 1
- 2
- 3
- 4
- 5
- 6
- 7
D:githubpycharmDevelopment>python classoop.py halo hi
File name is: classoop.py
The first arg is: halo
The second arg is: hi
- 1
- 2
- 3
- 4
- 5
1.2 sys.platform平台查看
>>> sys.platform
‘win32‘
- 1
- 2
- 3
1.3 sys.path 查看python路径
我们在执行import module_name的时候,python内部发生了什么呢?简单的说,就是搜索module_name。根据sys.path的路径来搜索module.name
>>> sys.path
[‘‘, ‘E:\\python35\\python35.zip‘, ‘E:\\python35\\DLLs‘, ‘E:\\python35\\lib‘, ‘E
:\\python35‘, ‘E:\\python35\\lib\\site-packages‘, ‘E:\\python35\\lib\\site-packa
ges\\setuptools-27.3.0-py3.5.egg‘]
- 1
- 2
- 3
- 4
- 5
大家以后写好的模块就可以放到上面的某一个目录下,便可以正确搜索到了。当然大家也可以添加自己的模块路径。Sys.path.append(“mine module path”).
1.4 sys.stdin,sys.stdout,sys.stderr
stdin , stdout , 以及stderr 变量包含与标准I/O 流对应的流对象. 如果需要更好地控制输出,而print 不能满足你的要求, 它们就是你所需要的. 你也可以替换它们, 这时候你就可以重定向输出和输入到其它设备( device ), 或者以非标准的方式处理它们
1.5 sys.builtin_module_names
sys.builtin_module_names返回一个列表,包含内建模块的名字
1.6 sys.exit(n)
调用sys.exit(n)可以中途退出程序,当参数非0时,会引发一个SystemExit异常,从而可以在主程序中捕获该异常。
1.7 sys.version字符串给你提供安装的Python的版本信息。sys.version_info元组则提供一个更简单的方法来使你的程序具备Python版本要求功能。
>>> sys.version
‘3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55) [MSC v.1900 64 bit (AMD64)]‘
>>> sys.version_info
sys.version_info(major=3, minor=5, micro=2, releaselevel=‘final‘, serial=0)
>>>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
1.8 sys.getdefaultencoding(): 获取系统当前编码,一般默认为ascii。
sys.setdefaultencoding(): 设置系统默认编码,执行dir(sys)时不会看到这个方法,在解释器中执行不通过,可以先执行reload(sys),在执行 setdefaultencoding(‘utf8’),此时将系统默认编码设置为utf8。(见设置系统默认编码 )
sys.getfilesystemencoding(): 获取文件系统使用编码方式,Windows下返回’mbcs’,mac下返回’utf-8’.
>>> sys.getdefaultencoding()
‘utf-8‘
>>> sys.getfilesystemencoding()
‘mbcs‘
- 1
- 2
- 3
- 4
- 5
2. json 模块
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。
数据格式可以简单地理解为键值对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。
值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。
2.1 json.dumps()
dump的功能就是把Python对象encode为json对象,一个编码过程。注意json模块提供了json.dumps和json.dump方法,区别是dump直接到文件,而dumps到一个字符串,这里的s可以理解为string。
>>>data = [ { ‘a‘:‘A‘, ‘b‘:(2, 4), ‘c‘:3 } ]
>>>print(‘data:‘, repr(data))
>>>data: [{‘c‘: 3, ‘b‘: (2, 4), ‘a‘: ‘A‘}]
>>>data_string = json.dumps(data)
>>>print(‘json:‘, data_string)
json: [{"c": 3, "b": [2, 4], "a": "A"}]
>>>type(data)
<class ‘list‘>
>>>type(data_string)
<class ‘str‘>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
2.2 json.dump()
不仅可以把Python对象编码为string,还可以写入文件。因为我们不能把Python对象直接写入文件,这样会报错TypeError: expected a string or other character buffer object,我们需要将其序列化之后才可以。
with open(‘json-dump.json‘,‘w‘) as fp:
json.dump(data,fp)
- 1
- 2
2.3 json.loads()
从Python内置对象dump为json对象我们知道如何操作了,那如何从json对象decode解码为Python可以识别的对象呢?是的用json.loads方法,当然这个是基于string的,如果是文件,我们可以用json.load方法。
decoded_json = json.loads(data_string)
- 1
- 2
2.4 json.load()
可以直接load文件。
with open(‘output.json‘) as fp:
print type(fp)
loaded_json = json.load(fp)
- 1
- 2
- 3
3 pickle模块(和json模块作对比)
可能用到的方法有以下:
‘bytes_types‘, ‘codecs‘, ‘compatible_formats‘, ‘decode_long‘, ‘dispatch_table‘, ‘dump‘, ‘dumps‘, ‘encode_long‘, ‘format_version‘, ‘io‘, ‘islice‘, ‘load‘, ‘loads‘, ‘maxsize‘, ‘pack‘, ‘re‘, ‘sys‘, ‘unpack‘, ‘whichmodule‘
- 1
- 2
3.1 dumps(object) 返回一个字符串,它包含一个 pickle 格式的对象; loads(string) 返回包含在 pickle 字符串中的对象; dump(object, file) 将对象写到文件,这个文件可以是实际的物理文件,但也可以是任何类似于文件的对象,这个对象具有 write() 方法,可以接受单个的字符串参数; load(file) 返回包含在 pickle 文件中的对象。
缺省情况下, dumps() 和 dump() 使用可打印的 ASCII 表示来创建 pickle。两者都有一个 final 参数(可选),如果为 True ,则该参数指定用更快以及更小的二进制表示来创建 pickle。 loads() 和 load() 函数自动检测 pickle 是二进制格式还是文本格式。
>>>data_string = pickle.dumps(data)
>>>type(data_string)
>>><class ‘bytes‘>
>>>data = pickle.loads(data_string)
>>>type(data)
>>><class ‘list‘>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
使用二进制 pickle 格式不会在节省空间上显示出太大的效率。然而,在实际使用复杂对象的系统中,您会看到,使用二进制格式可以在大小和速度方面带来显著的改进。
3.2 dump() 和 load()
使用文件和类似文件的对象。这些函数的操作非常类似于我们刚才所看到的 dumps() 和 loads() ,区别在于它们还有另一种能力 — dump() 函数能一个接着一个地将几个对象转储到同一个文件。随后调用 load() 来以同样的顺序检索这些对象。
>>>fo = open(‘halo.txt‘,‘wb‘)
>>>pickle.dump(data,fo,True)
>>>fo.close()
>>>fo1 = open(‘halo.txt‘,‘rb‘)
>>>load = pickle.load(fo1)
>>>load
[{‘c‘: 3, ‘b‘: (2, 4), ‘a‘: ‘A‘}]
>>>type(fo1)
<class ‘_io.BufferedReader‘>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
3.3 检索所支持的格式
>>>pickle.format_version
‘4.0‘
>>>pickle.compatible_formats
[‘1.0‘, ‘1.1‘, ‘1.2‘, ‘1.3‘, ‘2.0‘, ‘3.0‘, ‘4.0‘]
- 1
- 2
- 3
- 4
- 5
pickle的基本功能如上,但是其还有很多高阶用法如对象引用的维护,循环引用和递归引用等。
4. shutil
高级的 文件、文件夹、压缩包 处理模块
shutil被定义为Python中的一个高级的文件操作模块,拥有比os模块中更强大的函数,可能用到的方法有以下:
‘chown‘, ‘collections‘, ‘copy‘, ‘copy2‘, ‘copyfile‘, ‘copyfileobj‘, ‘copymode‘, ‘copystat‘, ‘copytree‘, ‘disk_usage‘, ‘errno‘, ‘fnmatch‘, ‘get_archive_formats‘, ‘get_terminal_size‘, ‘get_unpack_formats‘, ‘getgrnam‘, ‘getpwnam‘, ‘ignore_patterns‘, ‘make_archive‘, ‘move‘, ‘nt‘, ‘os‘, ‘register_archive_format‘, ‘register_unpack_format‘, ‘rmtree‘, ‘stat‘, ‘sys‘, ‘tarfile‘, ‘unpack_archive‘, ‘unregister_archive_format‘, ‘unregister_unpack_format‘, ‘which‘]
- 1
- 2
4.1 copy()
chutil.copy(source, destination)
- 1
- 2
shutil.copy() 函数实现文件复制功能,将 source 文件复制到 destination 文件夹中,两个参数都是字符串格式。如果 destination 是一个文件名称,那么它会被用来当作复制后的文件名称,即等于 复制 + 重命名。
copy2()
copy2()工作类似copy(),不过复制到新文件的元数据会包含访问和修改时间。
4.2 copyfile()
copyfile()将源的内容复制给目标,如果没有权限写目标文件则产生IoError
copyfile()实际是使用了底层函数copyfileobj()。copyfile()的参数是文件名,copyfileobj()的参数是打开的文件句柄。第三个参数可选,用于读入块的缓冲区长度。
4.3 copymode() 复制文件元数据
在UNIX创建一个新文件,会根据当前用户的umask接受权限。要把权限从一个文件复制到另一个文件,可以使用copymode()。
要复制其他元数据,可以使用copystat()。
使用copystat()只会复制与文件关联的权限和日期。
4.4 copytree()处理目录树
shutil包含三个函数处理目录树。要把一个目录从一个位置复制到另一个位置,使用copytree()。这会递归遍历源目录树,将文件复制到目标。
copytree()可以将当前这个实现当作起点,在使用前要让它更健壮,可以增加一些特性,如进度条。
symlinks参数控制着符号链接作为链接复制还是文件复制。默认将内容复制到新文件,如果选项为true,会在目标中创建新的符号链接。
4.5 rmtree()
要删除一个目录及其内容,可以使用rmtree()。
4.6 move()
将一个文件或目录从一个位置移动到另一个位置,可以使用move()。
4.7 shutil.make_archive(base_name, format, …)
创建压缩包并返回文件路径,例如: zip、tar
base_name: 压缩包的文件名,也可以是压缩包的路径。文件名是保存到当前路径,路径时保存到指定路径
format: 压缩包种类, zip, tar, bztar, gztar
root_dir: 要压缩的文件夹路径(默认当前目录)
owner: 用户, 默认当前用户
group: 组,默认当前组
logger: 用户于记录日志,通常是logging.Logger对象
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
#将当前目录打包放到当前目录下
ret = shutil.make_archive(‘dq‘, ‘gztar‘)
- 1
- 2
#将指定目录打包放到当前目录
root_dir = ‘D:/temp/python/zuoye/day6‘
ret = shutil.make_archive(‘dq‘, ‘gztar‘, root_dir=rootdir)
- 1
- 2
- 3
5. random
除了随机数的生成外,random模块还有很多用处,以下为可能用到的方法:
‘betavariate‘, ‘choice‘, ‘expovariate‘, ‘gammavariate‘, ‘gauss‘, ‘getrandbits‘, ‘getstate‘, ‘lognormvariate‘, ‘normalvariate‘, ‘paretovariate‘, ‘randint‘, ‘random‘, ‘randrange‘, ‘sample‘, ‘seed‘, ‘setstate‘, ‘shuffle‘, ‘triangular‘, ‘uniform‘, ‘vonmisesvariate‘, ‘weibullvariate‘
- 1
- 2
5.1 random.random():返回[0.0,1)之间的浮点数
>>>import random
>>>random.random()
0.265150807792064
- 1
- 2
- 3
- 4
5.2 random.uniform(a, b):返回[a,b]之间的浮点数
5.3 random.randint(a, b):返回[a,b]之间的整数
5.4 random.randrange([start], stop[, step]):从指定范围内,按指定基数递增的
random.randrange(10, 100, 2)在结果上与 random.choice(range(10, 100, 2) 等效。
- 1
- 2
5.5 random.choice(sequence)。参数sequence表示一个有序类型。这里要说明一下:sequence在python不是一种特定的类型,而是泛指一系列的类型。list, tuple, 字符串都属于sequence。
5.6 random.shuffle(x[, random]),用于将一个列表中的元素打乱
5.7 random.sample(sequence, k),从指定序列中随机获取指定长度的片断。sample函数不会修改原有序列。
slice = random.sample(list, 5) #从list中随机获取5个元素,作为一个片断返回
喜欢的朋友可以加QQ群813622576,群内有免费资料供大家一起交流学习
以上是关于python常用模块part1的主要内容,如果未能解决你的问题,请参考以下文章
2018-06-26-Python全栈开发day22-part1-os,json,sys,pickle,shelve模块介绍