一 . 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)