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的主要内容,如果未能解决你的问题,请参考以下文章

Python 常用模块学习

python基础之模块part1

python常用代码片段总结

nodejs常用代码片段

python常用代码

2018-06-26-Python全栈开发day22-part1-os,json,sys,pickle,shelve模块介绍