zoukankan      html  css  js  c++  java
  • Python常用模块os & sys & shutil模块

    OS模块

    import os
    
    
    '''
    os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
    os.chdir("dirname")  改变当前脚本工作目录;相当于shell下cd
    os.curdir  返回当前目录: ('.')
    os.pardir  获取当前目录的父目录字符串名:('..')
    os.makedirs('dirname1/dirname2')    可生成多层递归目录
    os.removedirs('dirname1')    若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
    os.mkdir('dirname')    生成单级目录;相当于shell中mkdir dirname
    os.rmdir('dirname')    删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
    os.listdir('dirname')    列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
    os.remove()  删除一个文件
    os.rename("oldname","newname")  重命名文件/目录
    os.stat('path/filename')  获取文件/目录信息
    In [23]: os.stat('路飞作业')
    Out[23]: stat_result(st_mode=16893, st_ino=933171L, st_dev=43, st_nlink=3, 
    st_uid=1000, st_gid=1000, st_size=4096L,
     st_atime=1523518431, st_mtime=1523517556, st_ctime=1523517556)
    
    os.sep    输出操作系统特定的路径分隔符,win下为"\",Linux下为"/"
    os.linesep    输出当前平台使用的行终止符,win下为"	
    ",Linux下为"
    "
    os.pathsep    输出用于分割文件路径的字符串 win下为;,Linux下为:
    os.name    输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
    os.system("bash command")  运行shell命令,直接显示
    os.popen("bash command).read()  运行shell命令,获取执行结果
    
    In [14]: os.popen('df -h').read()
    Out[14]: 'Filesystem    Size  Used Avail Use% Mounted on
    udev       482M     0  482M   0% /dev
    tmpfs                 100M  3.3M   97M   4% /run
    /dev/sda1              19G  3.8G   14G  22% /
    tmpfs                 500M  4.0K  500M   1% /dev/shm
    tmpfs                 5.0M     0  5.0M   0% /run/lock
    tmpfs                 500M     0  500M   0% /sys/fs/cgroup
    tmpfs                 100M     0  100M   0% /run/user/1000
    /home/pyvip/.Private   19G  3.8G   14G  22% /home/pyvip
    '
    
    os.environ  获取系统环境变量
    os.kill(10884,signal.SIGKILL)杀死进程:
    
    
    
    os.path
    os.path.abspath(path) 返回path规范化的绝对路径 os.path.split(path) 将path分割成目录和文件名二元组返回 os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素 os.path.basename(path) 返回path最后的文件名。如何path以/或结尾,那么就会返回空值。
                            即os.path.split(path)的第二个元素
    os.path.exists(path)  如果path存在,返回True;如果path不存在,返回False
    os.path.isabs(path)  如果path是绝对路径,返回True
    os.path.isfile(path)  如果path是一个存在的文件,返回True。否则返回False
    os.path.isdir(path)  如果path是一个存在的目录,则返回True。否则返回False
    os.path.join(path1[, path2[, ...]])  将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
    os.path.getatime(path)  返回path所指向的文件或者目录的最后访问时间
    os.path.getmtime(path)  返回path所指向的文件或者目录的最后修改时间
    os.path.getsize(path) 返回path的大小
    '''
    #
    dir = r'/home/pyvip/sipder/路飞作业/第二模块/chapter4-常用模块/课堂练习/xml模块'
    # 获取文件夹大小
    count = 0
    if (os.path.isdir(dir)):           #判断是否为目录
           for r, ds, files in os.walk(dir): #遍历目录下所有文件根,目录下的每一个文件夹(包含它自己), 产生3-元组 (dirpath, dirnames, filenames)【文件夹路径, 文件夹名字, 文件名称】
                for file in files:      #遍历所有文件
                  print(os.path.join(r, file),os.path.getsize(os.path.join(r, file)))
                  size = os.path.getsize(os.path.join(r, file)) #获取文件大小
                  count += size
    print(count)
    if count > 1024 * 1024:
        print('%.4f M'% (count/ 1024.0 / 1024.0))
    elif count > 1024:
        print('%.4f K' % (count/ 1024.0))
    
    """
    输出
    /home/pyvip/sipder/路飞作业/第二模块/chapter4-常用模块/课堂练习/xml模块/xml_handler2.py 490
    /home/pyvip/sipder/路飞作业/第二模块/chapter4-常用模块/课堂练习/xml模块/__init__.py 55
    /home/pyvip/sipder/路飞作业/第二模块/chapter4-常用模块/课堂练习/xml模块/xml_handler.py 418
    /home/pyvip/sipder/路飞作业/第二模块/chapter4-常用模块/课堂练习/xml模块/xmlbuild.py 571
    /home/pyvip/sipder/路飞作业/第二模块/chapter4-常用模块/课堂练习/xml模块/build_out.xml 243
    /home/pyvip/sipder/路飞作业/第二模块/chapter4-常用模块/课堂练习/xml模块/xml test 831
    /home/pyvip/sipder/路飞作业/第二模块/chapter4-常用模块/课堂练习/xml模块/output.xml 595
    3203
    3.1279 K
    
    """
    # 删除文件夹下所有文件
    import os, sys
    dirPath = "test/"
    print ('移除前test目录下有文件:%s' %os.listdir(dirPath))
    #判断文件是否存在
    if(os.path.exists(dirPath+"foo.txt")):
        os.remove(dirPath+"foo.txt")
        print ('移除后test 目录下有文件:%s' %os.listdir(dirPath))
    else:
        print ("要删除的文件不存在!")

    注意:os.stat('pathfilename') 获取文件目录信息的结构说明

    stat 结构:
    
    st_mode: inode 保护模式
    st_ino: inode 节点号。
    st_dev: inode 驻留的设备。
    st_nlink: inode 的链接数。
    st_uid: 所有者的用户ID。
    st_gid: 所有者的组ID。
    st_size: 普通文件以字节为单位的大小;包含等待某些特殊文件的数据。
    st_atime: 上次访问的时间。
    st_mtime: 最后一次修改的时间。
    st_ctime: 由操作系统报告的"ctime"。在某些系统上(如Unix)是最新的元数据更改的时间,在其它系统上(如Windows)是创建时间(详细信息参见平台的文档)。

    sys模块

    sys模块是与python解释器交互的一个接口。

    import sys
    print(sys.argv) #实现从程序外部向程序传递参数。(在命令行里面输打开路径执行)
    name=sys.argv[1] #命令行参数List,第一个元素是程序的本身路径
    password = sys.argv[2]
    if name=='yy' and password == '123':
        print('继续执行程序')
    else:
       exit()
    
    sys.exit()#退出程序,正常退出时exit(0)
    print(sys.version)#获取python解释的版本信息
    print(sys.maxsize)#最大能表示的数,与系统多少位有关
    print(sys.path)#返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
    print(sys.platform)#返回操作系统平台名称
    
    sys.getrecursionlimit() #获取最大递归层数
    sys.setrecursionlimit(1200) #设置最大递归层数
    sys.getdefaultencoding()  #获取解释器默认编码
    sys.getfilesystemencoding  #获取内存数据存到文件里的默认编码

    shutil 模块

    常用方法

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

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

    #先来看看其源代码。
    def copyfileobj(fsrc, fdst, length=16*1024):
        """copy data from file-like object fsrc to file-like object fdst"""
        while 1:
            buf = fsrc.read(length)
            if not buf:
                break
            fdst.write(buf)
    
    #注意! 在其中fsrc,fdst都是文件对象,都需要打开后才能进行复制操作
    import shutil
    f1=open('name','r')
    f2=open('name_copy','w+')
    shutil.copyfileobj(f1,f2,length=16*1024)

    shutil.copyfile(src, dst)
    拷贝文件copyfile调用了copyfileobj

    shutil.copyfile('f1.log', 'f2.log') #目标文件无需存在
    #一句就可以实现复制文件内容
    

    shutil.copymode(src, dst)
    仅copy权限,不更改文件内容,组和用户。

    shutil.copymode('f1.log', 'f2.log') #目标文件必须存在

    shutil.copy(src, dst)
    复制文件的内容以及权限,先copyfile后copymode

    import shutil
    shutil.copy('f1.log', 'f2.log')

    shutil.copystat(src,dst)   

    #复制所有的状态信息,包括权限,组,用户,时间等

    import shutil
    shutil.copystat('f1.log', 'f2.log')

    shutil.copy2(src,dst) 

     #复制文件的内容以及文件的所有状态信息。先copyfile后copystat

    import shutil
    shutil.copy2('f1.log', 'f2.log')
    

    shutil.copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2,ignore_dangling_symlinks=False)  

    #递归的复制文件内容及状态信息

    [root@ python_test]# tree copytree_test/
    copytree_test/
    └── test
        ├── test1
        ├── test2
        └── hahaha
    
    [root@ test]# ls -l
    total 0
    -rw-r--r--. 1 python python 0 May 14 19:36 hahaha
    -rw-r--r--. 1 python python 0 May 14 19:36 test1
    -rw-r--r--. 1 root   root   0 May 14 19:36 test2
    
    >>> shutil.copytree('copytree_test','copytree_copy')
    'copytree_copy'
    
    [root@ python_test]# ls -l
    total 12
    drwxr-xr-x. 3 root   root   4096 May 14 19:36 copytree_copy
    drwxr-xr-x. 3 root   root   4096 May 14 19:36 copytree_test
    -rw-r--r--. 1 python python   79 May 14 05:17 test1
    -rw-r--r--. 1 root   root      0 May 14 19:10 test2
    [root@ python_test]# tree copytree_copy/
    copytree_copy/
    └── test
        ├── hahaha
        ├── test1
        └── test2

    shutil.rmtree(path, ignore_errors=False, onerror=None)  

    #递归地删除文件

    import shutil
    shutil.rmtree('folder1')

    shutil.move(src, dst)   

    #递归的移动文件,它类似mv命令,其实就是重命名。

    import shutil
    shutil.move('folder1', 'folder3')

    make_archive(base_name, format, root_dir=None, base_dir=None, verbose=0,dry_run=0, owner=None, group=None, logger=None) 

    #压缩打包

    base_name:    压缩打包后的文件名或者路径名

    format:          压缩或者打包格式    "zip", "tar", "bztar"or "gztar"

    root_dir :         将哪个目录或者文件打包(也就是源文件)

    owner: 用户,默认当前用户

    group: 组,默认当前组

    logger: 用于记录日志,通常是logging.Logger对象

    >>> shutil.make_archive('tarball','gztar',root_dir='copytree_test')
    
    [root@ python_test]# ls -l
    total 12
    drwxr-xr-x. 3 root   root   4096 May 14 19:36 copytree_copy
    drwxr-xr-x. 3 root   root   4096 May 14 19:36 copytree_test
    -rw-r--r--. 1 root   root      0 May 14 21:12 tarball.tar.gz
    -rw-r--r--. 1 python python   79 May 14 05:17 test1
    -rw-r--r--. 1 root   root      0 May 14 19:10 test2
    
    #将 /data 下的文件打包放置当前程序目录
    import shutil
    ret = shutil.make_archive("data_bak", 'gztar', root_dir='/data')
    
    #将 /data下的文件打包放置 /tmp/目录
    import shutil
    ret = shutil.make_archive("/tmp/data_bak", 'gztar', root_dir='/data')

    shutil 对压缩包的处理是调用 ZipFile 和 TarFile 两个模块来进行的,详细:

    zipfile压缩&解压缩

    压缩

    * zipfile.ZipFile(fileName[, mode[, compression[, allowZip64]]]) 

    * mode 和文件操作一样,'r'表示只打开一个存在的只读ZIP文件;'w'表示清空并打开一个只写的ZIP文件,或者创建只写一个ZIP文件;'a'表示打开一个ZIP文件,并添加内容。

      compression表示压缩格式,可选的格式只有两种:ZIP_STORE;ZIP_DEFLATED。ZIP_STORE是默认的,表示不压缩;ZIP_DEFLATED表示压缩。allowZip64为True时,表示支持64位的压缩。

    import zipfile
    
    with zipfile.ZipFile('test.zip', mode='w',compression=zipfile.ZIP_DEFLATED) as zipf:
       zipf.write('/home/pyvip/sipder/路飞作业/第二模块/chapter4-常用模块/课堂练习/xml模块/xml_handler2.py')
       zipf.write('/home/pyvip/sipder/路飞作业/第二模块/chapter4-常用模块/课堂练习/xml模块/xml_handler.py')
    
    zipf = zipfile.ZipFile('test.zip')
    print(zipf.namelist())

    解压

    f.extract(directory)和f.exractall(directory)

    import zipfile
    
    
    zipf = zipfile.ZipFile('test.zip')
    
    zipf.extractall('channel1')#将所有文件解压到channel1目录下

     高级应用 
    1 zipfile.is_zipfile(filename) 
    判断一个文件是不是压缩文件 
    2 ZipFile.namelist() 
    返回文件列表 
    3 ZipFile.open(name[, mode[, password]]) 
    打开压缩文档中的某个文件

    if zipfile.is_zipfile('test.zip'): #is_zipfile() 判断是否似zip文件
       f = zipfile.ZipFile('test.zip')
       files = f.namelist() #namelist() 返回zip压缩包中的所有文件
       print ('files:', files)
       mess = f.open('home/pyvip/sipder/路飞作业/第二模块/chapter4-常用模块/课堂练习/xml模块/xml_handler2.py') #打开zip压缩包中的某个文件,可读可写
       print ('mess:', mess.read())
       f.close()

    tarfile压缩&解压缩

    import tarfile
    
    # 压缩
    >>> t=tarfile.open('/tmp/egon.tar','w')
    >>> t.add('/test1/a.py',arcname='a.bak')
    >>> t.add('/test1/b.py',arcname='b.bak')
    >>> t.close()
    
    # 解压
    >>> t=tarfile.open('/tmp/egon.tar','r')
    >>> t.extractall('/egon')
    >>> t.close()
  • 相关阅读:
    windows下的定时任务设置详解
    php实现 字符串分割
    js进阶 11-7 jquery如何获取和改变元素的位置
    js进阶 11-6 jquery如何获取和设置元素的宽高(jquery多方法)
    详解PHP设置定时任务的实现方法
    详解PHP实现定时任务的五种方法
    百度echarts可以做什么
    前端开发框架对比(工具可以从框架中找)(好的框架,事半功倍)
    poj 3080 Blue Jeans
    ZOJ 3822 可能性DP
  • 原文地址:https://www.cnblogs.com/xiao-apple36/p/8809111.html
Copyright © 2011-2022 走看看