-------------------接《python内置模块(一)》--------------------------------html
4、json、pickle 数据序列化python
用于序列化的两个模块shell
json,用于字符串 和 python数据类型间进行转换json
pickle,用于python特有的类型 和 python的数据类型间进行转换windows
Json模块提供了四个功能:dumps、dump、loads、loaddom
pickle模块提供了四个功能:dumps、dump、loads、loadide
# pickle.dumps 经过特殊的形式将数据转换成只有python能认识的字符串
函数
>>> import picklespa
>>> 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)
5、 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)
6、 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] <defunct>
>>> res.wait() 彻底释放掉资源
更多点击这里
7、 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
---------------------------- 接 内置模块(三)------------------------------------