python内置模块在哪个文件夹_python内置模块(二)

-------------------接《python内置模块(一)》--------------------------------

四、json、pickle 数据序列化

用于序列化的两个模块json,用于字符串 和 python数据类型间进行转换

pickle,用于python特有的类型 和 python的数据类型间进行转换

Json模块提供了四个功能:dumps、dump、loads、load

pickle模块提供了四个功能:dumps、dump、loads、load

# pickle.dumps 通过特殊的形式将数据转换成只有python能认识的字符串

>>> import pickle

>>> data = {'lihongye1':'pwd1','lihongye2':'pwd2'}

>>> p_str = pickle.dumps(data)

>>> print(p_str)

或将字符串转换成只有python能认识的字符串存储在文件中

test = { 'user':'lihongye','pwd':'pwd1','num':'123'}

import pickle

fw = open('test_file','wb')

fw.write(pickle.dumps(test))

通过pickle.loads 将字符串转成原数据形式

import pickle

fr = open('test_file','rb')

frp = pickle.load(fr)

print(frp)

# 也可通过json.dumps方式将数据转成所有程序都能认识的字符串格式并写入文件

test = { 'user':'lihongye','pwd':'pwd1','num':'123'}

import json

fw = open('test_file','w')

fw.write(json.dumps(test))

通过json.loads方式将字符串转换成原数据格式

import json

fr = open('test_file','r')

frp = json.load(fr)

print(frp)

五、 random

随机数

>>> import random

>>> random.random()           # 随机小数

0.7558096251338481

>>> random.randint(1,3)       # 有范围的随机数1-3

2

>>> random.randrange(1,10)    # 有范围的随机数1-9

1

随机验证码实例        import  random

check_code = ''

for i in range(4):

current = random.randint(0,4)

if current != i:

tmp = str(chr(random.randint(65,90)))

else:

tmp = random.randint(0,9)

check_code += str(current)

print(check_code)

六、 subprocess 执行系统命令

call执行系统命令,如果命令正确则返回状态码,否则抛出异常

>>> res = subprocess.call(['ls','-l'],shell=False)

>>> res = subprocess.call(['ls -l'],shell=True)

shell = True 调用系统平台执行命令;

check_call执行命令,如果执行状态码是 0 ,则返回0,否则抛异常

>>> res = subprocess.check_call(['ls -l'],shell=True)   结果是0

>>> res = subprocess.check_call(['ls-l'],shell=True)    结果异常

check_output执行命令,如果执行状态码是 0 ,则返回结果,否则抛异常

>>> res = subprocess.check_ouput(['ls -l'],shell=True)   返回执行结果

>>> res = subprocess.check_ouput(['ls-l'],shell=True)   结果异常

Popen   用于执行更加复杂的系统命令

可用参数:

args:      shell命令,可以是字符串或者序列类型(如:list,元组)

bufsize:   指定缓冲。0 无缓冲,1 行缓冲,其他 缓冲区大小,负值 系统缓冲

stdin, stdout, stderr:分别表示程序的标准输入、输出、错误句柄

preexec_fn:只在Unix平台下有效,用于指定一个可执行对象(callable object),它将在

子进程运行之前被调用

close_sfs: 在windows平台下,如果close_fds被设置为True,则新创建的子进程将不会继承

父进程的输入、输出、错误管道。所以不能将close_fds设置为True同时重定向

子进程的标准输入、输出与错误(stdin, stdout, stderr)。

shell:同上cwd:用于设置子进程的当前目录env:用于指定子进程的环境变量。如果env =                               None,子进程的环境变量将从父进程中继承。universal_newlines:不同系统的换行

符不同,True -> 同意使用 \nstartupinfo与createionflags只在windows下有效将被

传递给底层的CreateProcess()函数,用于设置子进程的一些属性,如:主窗口的外观,

进程的优先级等等

>>>res=subprocess.Popen(['python3'],stdin=subprocess.PIPE,                                                 stdout=subprocess.PIPE,stderr=subprocess.PIPE)

>>> res.stdin.write(b"print('hello1')\n")

16

>>> res.stdin.write(b"print('hello2')\n")

16

>>> res.stdin.write(b"print('hello3')\n")

16

>>> ret = res.communicate(timeout=10)

>>> print(ret)

(b'hello1\nhello2\nhello3\n', b'')

>>> res.pid

5722

>>> res.terminate() 会成为僵尸进程并与父进程失去联系

root      5722  5633  0 10:19 pts/0    00:00:00 [python3]

>>> res.wait()  完全释放掉资源

七、 shutil 高级文件、文件夹、压缩包处理模块

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

fsrc 源文件  fdst 目标文件  length 每次拷贝长度(可有可无)

>>> import shutil

>>> s = open("smtp.py")

>>> d = open("smtp_copy","w")

>>> shutil.copyfileobj(s,d,length=20)

>>> d.close()

[root@python ~]# cat smtp_copy

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

>>> import shutil

>>> shutil.copyfile('smtp.py','smtp')

[root@python ~]# ls smtp smtp.py

smtp  smtp.py

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

>>> shutil.copymode('smtp.py','smtp')

[root@python ~]# ll smtp smtp.py

-rw-r--r-- 1 root root 1309 Jan 25 12:02 smtp

-rw-r--r-- 1 root root 1309 Dec 28 01:30 smtp.py

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

>>> shutil.copystat('smtp.py','smtp')

[root@python ~]# ll smtp smtp.py

-rw-r--r-- 1 root root 1309 Dec 28 01:30 smtp

-rw-r--r-- 1 root root 1309 Dec 28 01:30 smtp.py

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

>>> shutil.copy('smtp.py','smtp_copy')

[root@python ~]# ll smtp smtp_copy

-rw-r--r-- 1 root root 1309 Dec 28 01:30 smtp

-rw-r--r-- 1 root root 1309 Jan 25 12:19 smtp_copy

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

>>> shutil.copy2('smtp.py','smtp')

[root@python ~]# ll smtp*

-rw-r--r-- 1 root root 1309 Dec 28 01:30 smtp

-rw-r--r-- 1 root root 1309 Dec 28 01:30 smtp.py

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

>>> shutil.copytree('dir1','dir2')

[root@python ~]# ll dir1

total 4

drwxr-xr-x 3 root root 4096 Jan 25 11:19 dir2

[root@python ~]# ll dir2

total 4

drwxr-xr-x 3 root root 4096 Jan 25 11:19 dir2

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

>>> shutil.rmtree('dir2')

[root@python ~]# ll dir2

ls: cannot access dir2: No such file or directory

shutil.move(src, dst)递归的去移动文件

>>> shutil.move('dir1','/tmp')

[root@python ~]# ll dir1

ls: cannot access dir1: No such file or directory

[root@python ~]# ll /tmp/dir1

total 4

drwxr-xr-x 3 root root 4096 Jan 25 11:19 dir2

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对象

例:

>>> shutil.make_archive('dir1_archive',format='zip',root_dir='/root/dir1')

[root@python ~]# ll dir1*

-rw-r--r-- 1 root root   22 Feb 21 04:04 dir1_archive.zip

---------------------------- 接 内置模块(三)------------------------------------


版权声明:本文为weixin_39979167原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。