• 模块的使用


    一 . 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)
  • 相关阅读:
    Raknet是一个基于UDP网络传输协议的C++网络库(还有一些其它库,比如nanomsg,fastsocket等等)
    Arch Linux 是个 针对 i686 优化的 Linux 发行版(通过可以轻松使用的二进制包系统
    使用网盘(Dropbox/Google Drive)同步Git仓库
    百度网盘web端项目总结
    国内的网盘一个个倒下,这里有一份能让你用到老的存储指南(有好多评论)
    单元测试
    C# Closure
    gulp
    Net Memory Profiler 分析.Net程序内存泄露
    Net内存泄露原因及解决办法
  • 原文地址:https://www.cnblogs.com/zengchunyun/p/5205940.html
Copyright © 2020-2023  润新知