美文网首页
Python IO 流

Python IO 流

作者: stefanlei | 来源:发表于2018-11-27 11:17 被阅读0次

    转载请注明出处


    读文件

    输入输出流 (以python的角度)
    read 文件是 输入流,
    my_file=open(filename,encoding='utf8')
    
    • 读取整个文件
    data=my_file.read() # 一次性 读完整个文件 文件指针在结尾
    
    • 分段读取
    data=my_file.read(2) # 一次读两个字符 
    文件指针在第二个字符后面
    
    for item in data:
        print(item)
    # 一次性读取一个字符
    
    
    while True:
        data=my_file.read(2)   # 一次读取两个字符 你读取字符就是字符数,如果你加上b 以字节读取就是字节数
    
        if not data:
            break
        print(data)
    
    • 按行读取代码
    f = open("D:/aipai.sql", 'r', encoding='utf8')
    # 文件时一个可迭代对象
    for line in f:
        print(line)
    
    with open("file") as fh:
        line = fh.readline()
        while line:
            line = fh.readline()
    
    • 按行读取
    data=my_file.readline() # 一次读取一行 包含换行符
    data=my_file.readline(2) # 读取一行中的几个字符
    data=my_file.readlines() # 读取所有行 返回一个列表
    
    • 二进制读取
    file=open(r'd:\test.png','rb')
    data=file.read()  # 一次读取整个文件
    data=file.read(2) # 一次读取2个字节
    

    写文件

    • 文本写出
    data='Hello'
    file=open(filename,'w',encoding='utf8')
    file.write(data)   # 会覆盖原来文件,没有则新建
    writelines(['a','b'])  使用列表来写入
    
    • 追加文件
    data='Hello'
    file=open(filename,'a')
    file.write(data) # 追加到原来文件里面
    
    • 二进制写出
    data='你好'.encode('uft8')  #   bytes 类型
    file=open(file_name,'wb')
    file.write(data)
    
    • 二进制追加
    data='你好'.encode('uft8')  #   bytes 类型
    file=open(file_name,'ab')
    file.write(data)
    

    模式  可做操作     若文件不存在 是否覆盖
    r        只能读       报错          -
    r+       可读可写      报错         是
    w        只能写       创建         是
    w+        可读可写     创建            是
    a      只能写     创建         否,追加写
    a+       可读可写      创建         否,追加写
    

    读写内存

    from io import BytesIO
    from io import SringIo
    
    字符串和字节类似
    读
    
    with BytesIO(b'abc') as b:
        data=b.read()
    写
    
    with Bytes() as b:
        b.write(b'abc')
        print(b.getvalue())  读取内存中的内容
    
    • 定位读取
    f=open()
    f.seek(3,0)   # 3表示相对于起点的偏移量 第二个参数
    0 表示从文件起点开始
    1 表示从当前位置开始
    2 表示从文件末尾开始
    
    如果要使用 seek(5,1) 就是 后面使用非0 的参数那么就要用 二进制的方式读取文件
    
    f.tell()  # 返回当前的位置
    

    os 模块

    • 系统
    import os
    os.name  # 系统名称
    e=os.environ # 环境变量
    os.system()   # 执行系统命令
    os.popen()    # 执行系统命令
    print(e.get('path'))
    
    • 目录操作
    os.listdir()    # 列出当前目录的文件
    os.listdir('.') # 列出当前目录的文件
    os.listdir('..')# 返回父目录名称
    os.path.abspath('.') # 返回当前目录的绝对路径
    括号里面必须要加参数
    os.mkdir('test')  # 新建文件夹
    
    • 其他
    os.paht.exists('a.txt')
    os.path.split(r'\123\456\test.txt'') # 路径一分为二
    os.path.join(dir,file)  # 跨平台文件名称连接
    
    • 删除操作
    os.remove('test.txt')   # 删除文件
    os.rmdir('删除空目录')
    
    • 重命名
    os.rename(old_name,new_name)
    
    • 遍历目录
    os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])  -->生成器
    paths = os.walk(r'D:\000_laopei_python',onerror=None)
    print(next(paths))
    
    # 获取了指定目录的所有路径
    import os
    for root, dirs, files in os.walk(r"D:\000_laopei_python\day10", topdown=False):
        for name in files:
            print(os.path.join(root, name))
        for name in dirs:
            print(os.path.join(root, name))
    
    
    root 是当前目录名称、dirs 是当前目录下的子目录列表、files是当前目录下的文件列表
    
    
    

    shutil 模块

    shutil.copyfile(src,dest) # 文件复制
    
    自行上网搜索
    

    pickle

    • 序列化
    import pickle
    L=[1,2,3,4]
    # 序列化到文件  文件是二进制写入模式 wb
    with open(r'C:\Users\Stefan Salvatore\Desktop\1.txt','wb') as f:
        pickle.dump(L,f)
        
    # 序列化到内存 
    L=[1,2,3]
    msg=pickle.dumps(L)    # msg是存对象的内存
    
    • 反序列化
    # 从文件反序列化 文件是二进制读取模式 rb
    with open(r'C:\Users\Stefan Salvatore\Desktop\1.txt','rb') as f:
        data=pickle.load(f)
        print(data)
    # 从内存反序列化
    data=pickle.loads(msg)   # msg是之前的的内存
    print(data)
    

    json 文件传输格式

    • 序列化
    # 序列化到文件 文件是字符串写入模式 w  文件内存是 [1,2,3] 的字符串
    L=[1,2,3]
    with open(r'C:\Users\Stefan Salvatore\Desktop\1.txt','w') as f:
        json.dump(L,f)
    # 序列化到内存 
    L=[1,2,3]
    msg=json.dumps(L)   # msg是内存
    # 序列化对象
    
    • 反序列化
    # 从文件反序列化
    with open(r'C:\Users\Stefan Salvatore\Desktop\1.txt','r') as f:
        data=json.load(f)
        print(data)
    # 从内存反序列化
    data=json.loads(msg)
    print(data)
    

    相关文章

      网友评论

          本文标题:Python IO 流

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