美文网首页
python进阶——4. 处理文件

python进阶——4. 处理文件

作者: Lemon_Home | 来源:发表于2017-10-27 23:50 被阅读17次

    4.1 字符串的语义

    在python2 和 python3中,对字符串的语义是有着很大的区别的。

    • python2
      str:表面上是一个字符串,实际上是一连串的字节。
      Unicode:真正意义上的字符串
      如果存储文件,必须将Unicode转化成str这样连续的字节,就是将Unicode编码。反过来,读取文件时需要将str解码成Unicode。
    • python3
      byte:与py2中的str是同一含义。
      str:是真正意义上的字符串
      在读取、写入文本中,可以在open方法中定义具体的编解码格式。

    4.2 设置文件缓冲

    在文件内容写入到系统的设备上时,对这些文件进行I\O操作耗时可能会很长,可以使用缓冲区来减少调用时间。文件缓冲区的种类:全缓冲,行缓冲,无缓冲。
    全缓冲:当写入缓冲区的大小达到一定限制时,将缓冲区内的数据写入到设备中,缓冲区重新开始缓冲。
    行缓冲:在shell等终端设备上,使用的是行缓冲。遇到换行符进行一次输出。
    无缓冲:对一些串口来说,无需缓冲区,遇到相关信息直接输出。

    在python来说,如何设置缓冲区:
    全缓冲:在open函数的buffering设置大于1的整数n,n就是缓冲区的大小;
    行缓冲:在open函数的buffering设置等于1;
    无缓冲:在open函数的buffering设置0;

    4.3 获取文件状态

    使用系统os库的stat方法可以获取文件的状态。还有其他方法,例如lstat方法,其与stat区别是,lstat不跟随文件链接。

    import os
    
    print(os.stat("D:\workspace\PythonAdvance\chapter3\join_test.py"))
    
    os.stat_result(st_mode=33206, st_ino=1688849860425465, st_dev=217826, st_nlink=1, st_uid=0, st_gid=0, st_size=65, st_atime=1509114824, st_mtime=1509114824, st_ctime=1509114824)
    

    其中st_mode是文件类型,可以通过导入stat模块来解析。

    import os
    import stat
    
    s = os.stat("D:\workspace\PythonAdvance\chapter3\join_test.py")
    print(stat.S_ISDIR(s.st_mode))
    
    False
    

    获取文件的访问权限和可执行权限。

    print(stat.S_IXUSR & s.st_mode)
    print(stat.S_IRUSR & s.st_mode)
    

    获取文件最后访问时间、获取文件最后修改时间、获取文件最后节点时间。

    print(time.localtime(s.st_atime))
    print(time.localtime(s.st_ctime))
    print(time.localtime(s.st_mtime))
    

    获取文件大小

    print(s.st_size)
    

    上面介绍的都是使用os标准库中的常规方法。其实有另外简便的方法,就是使用os.path中封装好的方法。

    os.path中的方法

    4.4 使用临时文件

    当处理一些采集上来的数据时,这些临时文件如果常驻内存会很占用内存资源,这时,可以通过临时文件的形式。这些临时文件不用命名,也不用手动删除,在关闭之后自动删除掉。。

    from tempfile import TemporaryFile, NamedTemporaryFile
    
    f = TemporaryFile()
    f.write("adb-------------------------------".encode('utf8'))
    f.seek(0)
    print(f.read(10))
    

    使用TemporaryFile在文件系统中找不到所创建的临时文件。如果要这个临时文件创建之后能够被找到,就使用NamedTemporaryFile来创建。

    g = NamedTemporaryFile()
    print(g.name)
    
    C:\Users\HUANGG~1\AppData\Local\Temp\tmpcbe2d6_d
    

    临时文件在关闭之后会自动删除掉,如果不想删除掉,可以在构造器中加入delete=False的参数即可。

    相关文章

      网友评论

          本文标题:python进阶——4. 处理文件

          本文链接:https://www.haomeiwen.com/subject/eazdpxtx.html