zoukankan      html  css  js  c++  java
  • [PY3]——IO——文件目录操作

    IO—os、shutil—文件目录操作

    目录操作

    1. 新建

    os.mkdir(path[, mode])

    相当于mkdir,新建目录

    os.makedirs(path[, mode])

    相当于mkdir -p

    os.path.exists("/test2")
    False
    
    # os.mkdir( ) 如果父路径不存在,则新建报错
    os.mkdir('/test2/abc')
    FileNotFoundError: [Errno 2] No such file or directory: '/test2/abc'
    
    # os.makedirs( ) 会自动创建父目录,相当于mkdir -p
    os.makedirs('/test2/abc')
    print(os.path.exists('/test2/abc'))
    True

    2. 删除

    os.rmdir(path)

    删除空目录

    shutil.rmtree(path)

    删除且可以递归删除
    os.rmdir("/test2/abc")
    OSError: [Errno 39] Directory not empty: '/test2/abc'

    3. 查看目录内容

    os.listdir(path)

    列出目录下的内容,相当于ls

    # 列出目录内容但不递归子目录,返回列表
    print(os.listdir("/test2/abc"))
    ['abc2', 'kong.txt']

    4. 工作目录的查看和切换

    os.getcwd()

    获取当前所在目录  相当于pwd

    os.chdir(path)

    进入指定路径目录  相当于cd

    print(os.getcwd())
    /py3
    
    os.chdir('/test')
    print(os.getcwd())
    /test

    5. 重命名

    os.rename(src, dst)

    移动/重命名,相当于mv

    print(os.listdir("/test2/aa"))
    ['aa.sh']
    print(os.listdir("/test2/bb"))
    []
    
    os.rename("/test2/aa/aa.sh","/test2/bb/aa.sh.bak")
    
    print(os.listdir("/test2/aa"))
    []
    print(os.listdir("/test2/bb"))
    ['aa.sh.bak']

    6. 权限

    os.chmod(path, mode)

    修改权限

    os.chown(path, uid, gid)

    修改属主属组

    shutil (path,user=None,group=None)

    修改属主属组

    os.lchmod(path, mode)

     

    os.lchown(path, uid, gid)

     

    # os.chmod
    print
    (oct(os.stat("/test2/").st_mode)[-4:]) 0755 os.chmod("/test2",0o644) print(oct(os.stat("/test2/").st_mode)[-4:]) 0644
    # os.chown print(pwd.getpwuid(os.stat("/test2").st_uid).pw_name) root os.chown("/test2",uname_uid("user00"),gname_gid("user00")) print(pwd.getpwuid(os.stat("/test2").st_uid).pw_name) user00 print(grp.getgrgid(os.stat("/test2").st_gid).gr_name) user00

    # shutil.chown(这种方法的uid、gid参数可以接受字符串,更方便!)
    print(pwd.getpwuid(os.stat("/test2/aa.txt").st_uid).pw_name)
    root
    shutil.chown("/test2/aa.txt","user00","user00")

    print(pwd.getpwuid(os.stat("/test2/aa.txt").st_uid).pw_name)
    user00

    7. 复制和移动 

    shutil.copytree 复制整个目录树
    shutil.move 相当于windows下的Ctrl+X、Ctrl+V
    # shutil.move(src,dst,copy_function = copy2 )
    print(os.path.exists("/test2/aa"))
    True
    
    print(os.listdir("/test2/aa"))
    ['aa_aa', 'test.txt']
    
    shutil.move("/test2/aa","/test2/bb")
    
    print(os.path.exists("/test2/aa"))
    False
    
    print(os.path.exists("/test2/bb"))
    True
    
    print(os.listdir("/test2/bb"))
    ['aa_aa', 'test.txt']
    
    # shutil.copytree(src,dst,symlinks = False,ignore = None,copy_function = copy2,ignore_dangling_symlinks = False )
    print(os.path.exists("/test2/bb"))
    True
    
    print(os.listdir("/test2/bb"))
    ['aa_aa', 'test.txt']
    
    shutil.copytree("/test2/bb","/test/bb",ignore=ignore_patterns("*.txt"))
    
    print(os.path.exists("/test/bb"))
    True
    
    print(os.listdir("/test/bb"))
    ['aa_aa']

    8. 获取目录信息

    os.stat(path)

    获取目录信息 相当于stat

    os.statvfs(path)

    获取指定路径的文件系统统计信息

    os.path.getatime(path)

     

    os.path.getmtim(path)

     

    os.path.getctime(path)

     

    os.path.getsize(path)

     
    # os.stat输出的信息和stat命令一致
    print(os.stat("/test2"))
    os.stat_result(st_mode=16804, st_ino=296353, st_dev=2053, st_nlink=4, st_uid=500, st_gid=500, st_size=4096, st_atime=1503497751, st_mtime=1503497749, st_ctime=1503497749)
    
    os.system("stat /test2")
     File: `/test2'
     Size: 4096          Blocks: 8          IO Block: 4096   directory
     Device: 805h/2053d    Inode: 296353      Links: 4
     Access: (0644/drw-r--r--)  Uid: (  500/  user00)   Gid: (  500/  user00)
     Access: 2017-08-23 10:15:51.125760987 -0400
     Modify: 2017-08-23 10:15:49.496761986 -0400
     Change: 2017-08-23 10:15:49.496761986 -0400
    
    
    # os.stat中输出的每一条信息都可以通过 . 的方式单独获取
    print(os.stat("/test2").st_dev)
    2053
    
    # 获取ctime、atime、mtime时间(os.stat的输出是时间戳的形式所以用datetime)
    print(datetime.fromtimestamp(os.stat("/test2/").st_ctime))
    2017-08-22 14:51:07.943986
    
    # 获取uid、gid(os.stat的输出是gid和uid可以利用pwd和grp转换为更易读的username和groupname)
    print(pwd.getpwuid(os.stat("/test2").st_uid).pw_name)
    user00
    print(grp.getgrgid(os.stat("/test2").st_gid).gr_name)
    user00
    
    
    print(os.statvfs("/test2"))
    os.statvfs_result(f_bsize=4096, f_frsize=4096, f_blocks=2396548, f_bfree=1024591, f_bavail=902851, f_files=609600, f_ffree=384157, f_favail=384157, f_flag=4096, f_namemax=255)
    
    f_bsize: 文件系统块大小
    f_frsize: 分栈大小
    f_blocks: 文件系统数据块总数
    f_bfree: 可用块数
    f_bavail:非超级用户可获取的块数
    f_files: 文件结点总数
    f_ffree: 可用文件结点数
    f_favail: 非超级用户的可用文件结点数
    f_fsid: 文件系统标识 ID
    f_flag: 挂载标记
    f_namemax: 最大文件长度

    9. 修改

    os.utime(path, times)

    修改文件的访问和修改的时间

    文件操作

    1. 新建

    f=open("/test2/newfile.txt",mode="w+")

    2. 读写

    (参考《[PY3]——IO——文件读写》

    3. 删除

    os.remove(path) 删除文件
    print(os.path.exists("/test2/newfile.txt"))
    True
    
    os.remove("/test2/newfile.txt")
    
    print(os.path.exists("/test2/newfile.txt"))
    False

    4. 重命名

    同目录操作

    5. 权限

    同目录操作

    6. 移动

    shutil.copyfile 复制内容,属主属组不复制
    shutil.copymode  复制权限
    shutil.copystat 复制元数据
    shutil.copy 复制内容和权限,相当于copyfile+copymode
    shutil.copy2 复制内容和元数据,相当于copyfile+copystat

    7. 获取文件信息

    同目录操作

    其他操作

    1. 判断

    os.path.exists(path) 判断该路径是否存在
    os.path.isfile(path) 判断是否是文件
    os.path.isdir(path) 判断是否是目录
    os.path.ismount(path) 判断是否是挂载点
    os.path.islink(path) 判断是否是软链接
    os.path.isabs(path) 判断是否是绝对路径

    2. 路径获取

    os.path.basename(path)  
    os.path.dirname(path)  
    os.path.relpath(path)  
    os.path.split(path) 将path分割成目录和文件名的二元组返回

    3. 软/硬链接

    os.link(src,dst)                                      
    os.symlink(src,dst)  
    os.readlink(path)  

    参考资料

    《shutil模块介绍》

    《os.path官方文档》

    《shutil官方文档》

    《python3-os方法总结》

  • 相关阅读:
    Emqx启用Redis认证
    写在2021末
    如何让 Spring Security 「少管闲事」
    泛型就这么简单
    Spring Boot 对多线程支持提高程序执行效率
    Java桌面应用JavaFX01Hello World
    PostgreSQL实现Oracle merge into功能
    超大JSON文件解析方案(Java)
    记一次IDEA搭建Spring源码阅读环境
    Oracle转PostgreSQL之start with / connect by
  • 原文地址:https://www.cnblogs.com/snsdzjlz320/p/7410955.html
Copyright © 2011-2022 走看看