模块的使用

一 . shutil  文件处理模块

复制代码
1 import shutil
2 import os
3 
4 
5 fsrc = open("test", 'r')  # 读取test
6 fdst = open("test2", "w")
7 shutil.copyfileobj(fsrc, fdst, length=1)  # 拷贝文件对象到另一个文件
8 shutil.copyfile("./test", "tmp/aa")  # 拷贝文件到指定目录
复制代码
1 print(os.stat("test"))
2 shutil.copymode("test", "test2")  # 拷贝文件权限
3 print(os.stat("test2"))
复制代码
1 shutil.copystat("test", "test2")  # 拷贝文件状态信息,包括atime,mtime
2 print(os.stat("test2"))
3 shutil.copy("test", "test3")  # 仅拷贝文件和权限,状态信息不拷贝
4 print(os.stat("test3"))
5 shutil.copy2("test", "test4")  # 拷贝文件和修改时间mtime
6 print(os.stat("test4"))
7 shutil.ignore_patterns("*est*")  # 忽略文件模式
8 shutil.copytree(".", "tmp", symlinks=False, ignore=shutil.ignore_patterns("*est*", "tmp*"))  # 忽略包含est和tmp开头的文件
复制代码
1 shutil.rmtree(path="tmp", ignore_errors=False, onerror=None)  # 递归删除tmp目录,不忽略错误
2 
3 shutil.move("test2", "test5")  # 把test2 移动到test5.相当于重命名
4 shutil.make_archive("new_test", format="gztar", root_dir="./tmp/")
复制代码
 1 import zipfile
 2 # 压缩
 3 new_zip = zipfile.ZipFile('new_test.zip', 'w')  # 创建一个归档文件,创建时,模式为'w'
 4 new_zip.write('test3')  # 把test3文件压缩进去
 5 new_zip.write('test4')  # 把test4压缩进去
 6 new_zip.setpassword(b'123')  # 设置压缩密码,测试无效果
 7 new_zip.close()  # 写入关闭
 8 # 解压
 9 new_zip_decompress = zipfile.ZipFile("new_test.zip", 'r')  # 打开压缩包,模式 'r'
10 print(new_zip_decompress.filelist)  # 查看压缩包内文件
11 new_zip_decompress.extractall()  # 解压压缩包
12 new_zip_decompress.close()
复制代码
复制代码
1 import tarfile
2 new_tar = tarfile.open('test.tar', 'w')  # 在当前目录新建一个tar压缩文件
3 new_tar.add('test3', arcname='test3')  # 指定压缩文件路径,指定压缩后的名字
4 new_tar.add("test4", arcname="test4")
5 new_tar.close()  # 压缩完毕
6 
7 extra_tar = tarfile.open("test.tar", 'r')
8 extra_tar.extractall()  # 解压所有
9 extra_tar.close()
复制代码

二 . shelve  可持久化数据

复制代码
 1 import shelve
 2 
 3 new_shelve = shelve.open("shelve_file")  # 打开一个可持久化文件
 4 
 5 d1 = {"k1": "v1", "k2":"v2"}  # 定义要存储的数据
 6 l2 = ["1", '2', 3]
 7 
 8 new_shelve["d1"] = d1  # 存取一个数据到shelve文件,定义格式为key,value形式
 9 new_shelve["l2"] = l2
10 new_shelve.close()  #
复制代码
复制代码
 1 print(new_shelve.keys())
 2 print(type(new_shelve.keys()))
 3 print(new_shelve.values())
 4 new_shelve['l3'] = ["110", 112]
 5 test_l1 = new_shelve.get('l2')
 6 print('l2' in new_shelve.keys())  # 判断对象是否存在'l2'键
 7 print(list(new_shelve.keys()))  # 打印当前可持久化数据的键值
 8 for k, v in new_shelve.items():  # 遍历数据
 9     print(k, v)
10 print(test_l1)
11 test_l1.append(33)  # 修改数据
12 print(test_l1)
13 new_shelve['l2'] = test_l1  # 改变可持续化里的数据
14 
15 print(new_shelve['l2'])
复制代码

三. email & smtplib

复制代码
 1 import smtplib
 2 from email.mime.text import MIMEText
 3 
 4 mail_msg = MIMEText('<h1>快到碗里来</h1>', 'html', 'utf-8')
 5 mail_msg['Subject'] = '来自阿里的问候'
 6 mail_msg['From'] = 'zengchunyun@afcat.com'
 7 mail_msg['To'] = '850808158@qq.com'
 8 server = smtplib.SMTP_SSL('smtp.mxhichina.com', 465)
 9 server.login('zengchunyun@afcat.com', 'youpassword')
10 server.set_debuglevel(1)
11 server.send_message(mail_msg, 'zengchunyun@afcat.com', '850808158@qq.com')
12 server.quit()
复制代码

四. zlib

复制代码
 1 import zlib
 2 """
 3 zlib压缩数据时,如果数据间不包含任何重复的内容,则压缩后,反而长度更大
 4 对于有相同的内容存在,则压缩后才可能比压缩前长度更短
 5 """
 6 string = b'hello this is my friend i am from china'
 7 print(len(string))  # 39
 8 tar = zlib.compress(string)  # 压缩数据
 9 print(len(tar))  # 44
10 raw_string = zlib.decompress(tar)  # 解压数据
11 print(raw_string)
复制代码

五. pickle & json

六. logging

七.hashlib

八.os

复制代码
  1 import os
  2 from os import X_OK, W_OK, R_OK, F_OK
  3 
  4 # from stat import UF_NOUNLINK
  5 
  6 # X_OK  # Linux下的对应权限数字为1
  7 # W_OK  # Linux下对应权限数字2
  8 # R_OK  # Linux下权限对应数字为4
  9 # 这几个权限类型实际也是数字类型,所以下面的权限检查可以直接使用数字形式
 10 f = open('alg', 'w')
 11 fd = f.fileno()
 12 os.close(fd)  # 用于关闭文件描述符,
 13 # f.close()
 14 fd = os.open('alg', os.O_RDWR)  # 以可读写方式打开一个文件,并返回文件描述符
 15 cwd = os.getcwd()
 16 fd2 = os.open('/tmp', os.O_RDONLY)
 17 os.fchdir(fd2)  # 以描述符形式将工作目录切换到文件描述符位置,前提该描述符是一个目录
 18 print(os.getcwd())
 19 os.chdir(cwd)
 20 fd_dump = os.dup(fd)
 21 os.dup2(fd_dump, 2)  # 将文件描述符复制到描述符1,0为标准输入,1为标准正确输出,2为标准错误输出,复制后,
 22 # 接下来的标准正确输出都将写入文件,因为print的内容是输出到文件描述符1的,原来1的输出是到控制台,现在1变成文件了,所以直接写入文件
 23 print(fd_dump)
 24 os.write(fd, b'hhh')  # 向指定文件描述符写入数据
 25 os.close(fd)  # 用于关闭文件描述符,
 26 
 27 os.closerange(100, 200)  # 关闭所有范围内的文件描述符,错误会忽略
 28 # os.write(fd, b'hhh')  # 再次对关闭的描述符写入会OSError
 29 os.write(fd_dump, b'323')  # 但对复制对描述符依然可以写入
 30 
 31 # X表示可执行权限,有则返回True,没有执行权限则返回False
 32 print(os.access('alg', X_OK))  # X表示可执行权限,有则返回True,没有执行权限则返回False
 33 print(os.access('alg', W_OK))
 34 print(os.access('alg', R_OK))
 35 print(os.access('alg', F_OK))  # 测试路径是否存在
 36 
 37 print(os.getcwd())  # 获取当前工作目录
 38 os.chdir('..')  # 改变当前工作目录
 39 print(os.getcwd())  # 获取改变后的工作目录
 40 os.chdir('./algorithm')
 41 print(os.getcwd())  # 获取改变后的工作目录
 42 
 43 # 设置标志位
 44 UF_NODUMP = 0x00000001  # do not dump file  非转存储文件
 45 UF_IMMUTABLE = 0x00000002  # file may not be changed  文件设为只读
 46 UF_APPEND = 0x00000004  # file may only be appended to 文件只能追加内容
 47 UF_OPAQUE = 0x00000008  # directory is opaque when viewed through a union stack 当通过联合栈查看时目录是透明
 48 UF_NOUNLINK = 0x00000010  # file may not be renamed or  deleted 文件不能被重命名或删除
 49 UF_COMPRESSED = 0x00000020  # OS X: file is hfs-compressed
 50 UF_HIDDEN = 0x00008000  # OS X: file should not be displayed  文件不能被显示
 51 SF_ARCHIVED = 0x00010000  # file may be archived  可存档文件
 52 SF_IMMUTABLE = 0x00020000  # file may not be changed  文件不能修改
 53 SF_APPEND = 0x00040000  # file may only be appended to  文件只能追加
 54 SF_NOUNLINK = 0x00100000  # file may not be renamed or deleted  文件不可删除或重命名
 55 SF_SNAPSHOT = 0x00200000  # file is a snapshot file  快照文件
 56 os.chflags('alg', UF_NOUNLINK)  # 设置文件状态
 57 print(os.stat('alg'))
 58 
 59 # 设置权限
 60 S_ISUID = 0o4000  # set UID bit
 61 S_ISGID = 0o2000  # set GID bit
 62 S_ENFMT = S_ISGID  # file locking enforcement
 63 S_ISVTX = 0o1000  # sticky bit  目录里的文件拥有者才可删除更改,通常用于FTP共享文件
 64 S_IREAD = 0o0400  # Unix V7 synonym for S_IRUSR  设置为只读权限
 65 S_IWRITE = 0o0200  # Unix V7 synonym for S_IWUSR  只写权限
 66 S_IEXEC = 0o0100  # Unix V7 synonym for S_IXUSR  只能执行的权限
 67 S_IRWXU = 0o0700  # mask for owner permissions  创建者拥有所有权限
 68 S_IRUSR = 0o0400  # read by owner  拥有者可读权限
 69 S_IWUSR = 0o0200  # write by owner  拥有者可写权限
 70 S_IXUSR = 0o0100  # execute by owner  拥有者可执行权限
 71 S_IRWXG = 0o0070  # mask for group permissions  设置组拥有所有权限
 72 S_IRGRP = 0o0040  # read by group  设置组可读权限
 73 S_IWGRP = 0o0020  # write by group  设置组可写权限
 74 S_IXGRP = 0o0010  # execute by group  设置组可执行权限
 75 S_IRWXO = 0o0007  # mask for others (not in group) permissions  设置其它用户所有权限
 76 S_IROTH = 0o0004  # read by others  设置其它用户只读权限
 77 S_IWOTH = 0o0002  # write by others  设置其它用户可写权限
 78 S_IXOTH = 0o0001  # execute by others  设置其它用户可执行权限
 79 os.chmod('alg', S_IRWXU)
 80 # os.fchmod(fd, S_IREAD)  该方法用于通过描述符形式对文件进行权限控制
 81 
 82 os.chown('alg', 501,
 83          20)  # 设置文件的所有者是谁UID,所属组是谁GID,改变需要超级用户才能操作 不修改对应权限则使用-1作为占位符
 84 # os.fchown(fd, 501, 20)  # 通过描述符形式对文件设置所有者及所属组
 85 
 86 # os.chroot('/')  # 改变当前进程的根目录为指定目录,需要管理员权限
 87 
 88 fd = os.open('f', os.O_RDWR | os.O_CREAT)
 89 os.write(fd, b'hello')
 90 # os.fdatasync(fd)  # 强制将文件写入磁盘
 91 os.lseek(fd, 0, 0)
 92 print(os.read(fd, 100))
 93 # os.close(fd)
 94 
 95 # f = os.fdopen(fd, 'w+', -1)  # bufsize为0表示没有缓冲,1表示行缓冲,大于1对整数表示指定缓冲大小,负数表示使用系统默认大小缓冲
 96 # f.write('fdfdf')
 97 # os.close(f)
 98 f = os.open('tmp', os.O_RDWR | os.O_CREAT)
 99 
100 # print(os.pathconf_names)
101 print('PC_PIPE_BUF', os.fpathconf(f, 'PC_PIPE_BUF'))
102 
103 # print(os.fstat(f))  # 返回文件描述符状态
104 # print(os.fstatvfs(f))  # 返回文件描述符的文件系统信息
105 # os.fsync(f)  # 强制将文件写入磁盘
106 # os.ftruncate(f, 100)  # 对文件描述符进行操作,裁剪文件大小
107 os.chdir('/tmp')
108 # print('getcwdu', os.getcwdu())  # 返回当前工作目录的unicode对象
109 print(os.listdir('./'))  # 返回指定的文件下包含的文件名字列表
110 info = os.lstat('.')
111 print(os.major(info.st_dev))  # 从原始设备号提前major码
112 print(os.minor(info.st_dev))
113 
114 dev = os.makedev(os.major(info.st_dev), os.minor(info.st_dev))
115 print(dev)  # 创建一个原始的设备号
116 os.makedirs('/tmp/hah/ss')  # 递归创建目录
117 
118 os.mkfifo('/tmp/pipe', 0o644)  # 创建管道
119 
120 pty = os.openpty()  # 打开一个伪终端
121 print(pty)
复制代码
复制代码
 1 """
 2 创建管道,实现父子进程间通信
 3 """
 4 read, write = os.pipe()
 5 print('read, write', read, write)
 6 flag = 'm'
 7 process_id = os.fork()
 8 print('process_id', process_id)
 9 if process_id:
10     flag = 'm1'
11     os.close(write)
12     file = os.fdopen(read)
13     print('Parent reading')
14     string = file.read()
15     print('text = ', string)
16 else:
17     flag = 'm2'
18     os.close(read)
19     file = os.fdopen(write, 'w')
20     print('Child writing')
21     file.write('text written by child...')
22     file.close()
23     print('child closing')
24     sys.exit(0)
25 print('end', flag)
26 
27 fd = os.popen('ls', 'r', 1)  # 返回文件对象
28 print(fd.read())
29 if os.access('f', os.F_OK):
30     os.unlink('f')  # 删除一个文件,如果是目录或不存在则报错
31 
32 print(os.utime('alg', (1330712280, 1330712292)))  # 设置文件的访问和修改时间
33 print(os.utime('alg', None))  # 设置None 则使用当前时间
34 
35 for root, dirs, files in os.walk('.', topdown=False):
36     print(dirs)
37     print(files)
复制代码

九.re

复制代码
 1 #正则匹配时,对于没有分组功能的匹配,
 2 #比如findall(),匹配时是不需要调用group分组,就能获取结果,
 3 # search() 匹配时,对于结果需要调用group才能获取结果
 4 
 5 
 6 #以下正则模式
 7 string = "g0/0/1 ddd g2/0/2"
 8 ret = re.search(r'w+(/w+)+',string)
 9 #对于结果需要使用ret.group()获得
10 
11 #但是同样的模式,对于findall却不适用了,
12 # 如果使用分组匹配时,若用findall,则需要修改匹配正则,对于该分组模式需要使用(?:...)去匹配
13 
14 re.findall(r'w+(?:/w+)+', string)
复制代码

十.math

复制代码
1 import math
2 
3 print(math.factorial(10))  # 获取阶乘
4 print(math.cos(math.pi / 4))
5 print(math.log(1024, 2))  # 计算对数,指数1024,底数为2
6 print(math.pi)
7 print(math.sqrt(25))  # 计算开方值
复制代码

十一.random

复制代码
 1 import random
 2 
 3 choice = random.choice(['apple', 'pear', 'banana'])
 4 print(choice)
 5 choice = random.sample(range(10), 10)  # c从100以内选10个数
 6 print(choice)
 7 choice = random.random()  # 随机一个float数
 8 print(choice)
 9 choice = random.randrange(6)  # 从6里面随机一个数
10 print(choice)
复制代码
原文地址:https://www.cnblogs.com/dusihan/p/10131213.html