• 问题24:如何访问文件的状态


    问题24:如何访问文件的状态

     

    一、案例:在某些项目中,需要获取文件的状态

    文件状态:os.stat(path)

      1、文件的类型:普通文件、目录、符号链接、设备文件或管道(一般在Linux上)。。。

      2、文件的访问权限:一般为读、写、执行,3个权限;

      3、文件的最后的访问时间(对应read操作)、最后的修改时间(对应write操作)、最后的节点状态更改时间(对应的chang_move、chang_name的操作)

      4、获取普通文件的大小,也就是字节数

    #普通文件:如.py、.txt、.csv等;

    #目录文件:目录d/

    #符号链接文件:x.txt -> a.txt,也就是x.txt引用了普通文件a.txt

    二、Python中如何获取文件的状态

    方法一:系统调用

      标准库os模块下的三个系统调用:stat、fstat、lstat,获取文件状态;

    1)os.stat(path)、os.lstat(path)、os.fstat(fileno):获取指定文件的状态;

    2)stat和lstat的差异:表现在对符号链接文件的操作,如x.txt -> a.txt:

     #os.lstat('x.txt'):返回符号链接x.txt文件的状态;

     #os.stat('x.txt'):返回的是a.txt文件的状态,因为stat,要跟随符号链接,指向a.txt文件;

    3)fstat和stat功能一样,差异:os.fstat()操作的是文件的描述符(fileno),不是文件路径;

     #关于文件描述符,可参考:问题23:如何将文件映射到内存

    方法二:快捷函数

      标准库中os.path下的一些函数;#更加简洁

      #可参考:Python:文件操作

    三、实例查看文件状态(采用方法一)

     1)得到文件类型:os.stat('test.txt').st_mode

    复制代码
    import os
    
    f = open('test.txt', 'w')
    s = 'abcde'
    f.write(s)
    f.close()
    
    #得到文件状态
    test = os.stat('test.txt')
    #查看文件状态
    print(test)
    #输出:os.stat_result(st_mode=33206, st_ino=562949953421655, st_dev=995426, st_nlink=1, st_uid=0, st_gid=0, st_size=5, st_atime=1523433493, st_mtime=1523588571, st_ctime=1523433493)
    
    #文件类型存放在st_mode中
    print(test.st_mode)
    #输出:33206
    #33206实际上是一些标志位构成的;
    
    #将状态的标志位转换为二进制(用bin函数),也就是解析此标志位,可直观看出33206所表示的标志位
    print(bin(test.st_mode))
    #输出:0b1000000110110110
    import stat
    #查看stat模块的功能
    print(help(stat))
    复制代码

     2)查看文件权限:

    复制代码
    import stat
    
    #stat.S_ISDIR:判断文件是不是目录,若是,返回True,否则返回False
    s1 = stat.S_ISDIR(test.st_mode)
    
    #stat.S_ISREG:判断文件是不是普通文件;
    s2 = stat.S_ISREG(test.st_mode)
    
    #stat.S_ISBLK:判断是否是块设备;
    
    #查看文件的读权限,通过与stat.S_IRUSR(读权限)取交集,来看文件是否有读权限;
    test.st_mode & stat.S_IRUSR
    
    #查看用户对文件的执行权限
    test.st_mode & stat.S_IXUSER
    
    #查看其它人对文件的执行权限
    test.st_mode & stat.S_IXOTH
    复制代码

     3)查看文件的三个时间状态,访问、修改、更新:os.stat('test.txt').st_atime/st_mtime/st_ctime

    复制代码
    import os
    
    f = open('test.txt', 'w')
    s = 'abcde'
    f.write(s)
    f.close()
    
    #得到文件状态
    test = os.stat('test.txt')
    #查看文件状态
    print(test)
    #输出:os.stat_result(st_mode=33206, st_ino=562949953421655, st_dev=995426, st_nlink=1, st_uid=0, st_gid=0, st_size=5, st_atime=1523433493, st_mtime=1523588571, st_ctime=1523433493)

    #查看3个时间,并通过time模块下的locatime()方法将秒改为现代时间
    import time
    #查看最近的访问时间:test.st_time
    print(time.locatime(test.st_atime))

    #查看最近修改时间:test.st_mtime
    print(time.locatime(test.st_mtime))

    #查看最近节点状态更新时间:test.st_ctime
    print(time.locatime(test.st_ctime))
    复制代码

     4)查看文件大小

    #输出:os.stat_result(st_mode=33206, st_ino=562949953421655, st_dev=995426, st_nlink=1, st_uid=0, st_gid=0, st_size=5, st_atime=1523433493, st_mtime=1523588571, st_ctime=1523433493)
    
    #查看文件大小:字节数
    print(test.st_size)

     

    四、实例查看文件状态(采用方法一)

    标准库中os.path下的一些函数;#更加简洁

      #可参考:Python:文件操作

  • 相关阅读:
    实战练习6—水波纹制作
    实战练习5—冰块中的效果
    实战练习4—逼真眼泪
    5、选择工具&描边
    实战练习3-修饰服装皱褶
    实战练习2—方块
    实战练习1—照片的局部放大
    23、裁剪
    iOS 处理第三方SDK冲突问题
    iOS 修改启动图无效
  • 原文地址:https://www.cnblogs.com/valorchang/p/11434479.html
Copyright © 2020-2023  润新知