文件操作补充

缓存IO

前面讲了文件的读写操作,但有时候并不是直接读写文件到文件对象,可以通过一个缓存  
StringIO,在内存中读写str
    from io import StringIO
    f = StringIO()
    f.write('hello')
    # 5
    f.write(' ')
    # 1
    f.write('world!')
    # 6
    print(f.getvalue())
    #hello world!

    while True:
        s = f.readline()
        if s=='':
            break
        print(s.strip())
    '''
    Hello!
    Hi!
    Goodbye!
    '''
    因此,基本和文件读写一样,StringIO只能操作str

如果要操作二进制数据,使用ByteIO

    from io import ByteIO
    f = BytesIO()
    f.write('中文'.encode('utf-8))
    #6
    print(f.getvalue())
    #b'\xe4\xb8\xad\xe6\x96\x87'    
    这是用utf8编码的二进制文件

总结:StringIO和BytesIO 一个重要的作用是做缓存, 将文件缓存在内存中,然后一次性序列化到 磁盘中


操作文件和目录

这个操作还是比较实用,毕竟可以通过python语言进行自动化的文件操作,应用范围较广

    import os
    os.name     操作系统类型
    os.environ.get('PATH')  获取环境变量下的PATH变量
    ```
    C:\Users\Administrator\AppData\Roaming\Python\Python37\site-packages\pywin32_system32;D:\bin;C:\Program Files\Java\jdk1.8.0_281;D:\java\bin;D:\java\jre\bin;D:\maven\apache-maven-3.5.4\bin;C:\Windows\system32;C:\Program Files\Git\cmd;C:\Program Files\MySQL\MySQL Shell 8.0\bin\;C:\Users\Administrator\Anaconda3;...
    ```

    文件操作模块
    os.path.abspath('.')        查看当前目录的绝对路径
    #D:\vscodeBash\CodeBash

    pa=os.path.join('D:\vscodeBash\CodeBash','newdir')        拼接新的路径,用于后续创建,查找等操作

    os.mkdir(pa)        创建目录

    os.rmdir(pa)        删除目录

合并路径时,不要直接拼接字符串,要通过os.path.join()函数,这样可以正确处理不同操作系统的分隔符

同理,拆分路径,也不能直接拆字符串,通过os.path.split()函数,这个函数可以将路径拆成两个部分,后一个是最后一级目录或文件名

    os.path.split('D:\vscodeBash\CodeBash')
    #('D:\x0bscodeBash', 'CodeBash')

    os.path.splitext(('D:\vscodeBash\CodeBash\leetcode\两数之和.py'))
    #('D:\x0bscodeBash\\CodeBash\\leetcode\\两数之和', '.py')

另外还有一些储备知识:

os模块:
os.listdir(path) 列出了path路径下的所有文件和目录
os.path.isfile(name) 判定name文件存不存在
os.path.isdir(name)判定name是不是一个目录
os.path.getsize(name) 获得name文件的大小
os.path.getmtime(name) 获得name文件最后修改的时间(时间戳)


time模块:
time模块中时间表现的格式主要有三种:

  1. timestamp时间戳,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量
  2. struct_time时间元组,共有九个元素组,将年,月,日,小时,分钟,秒,一周第几日,一年第几日,夏令时等变量组合在一起。
  3. format time 格式化时间,已格式化的结构使时间更具可读性。包括自定义格式和固定格式。

具体用法见python小demo两个练习


序列化与反序列化

序列化和编码其实意思一样,编码注重过程,用什么规则编码,序列化而是注重结果,要产生什么样的数据,其中最常见的是JSON格式序列化,JSON非常通用

posted @ 2023-01-14 23:43  HugoWang010220  阅读(25)  评论(0)    收藏  举报