• 【8】python文件的读写方法


     

    (1)、读文件的步骤:

    (1)打开文件
      open(path,flag,encoding,[errors])
      path:打开路径
      flag:打开方式 r(只读) rb(二进制格式) r+(可以读写)
            w(只写,存在覆盖,不存在创建) wb(写入二进制) w+(用于读写)
      a(文件存在,追加) a+()
      encoding:编码方式
      errors:错误处理

    (2)读取文件


    (3)关闭文件

    (2)读取文件的几种方法

    # 第二步:读取文件内容 的四个方法
    
    #1:方法1-读取文件的全部内容[只适合读取小的文件,不然费内存]
    str1=f.read()
    print(str1)
    
    # 2 方法2-读取指定字符数
    str2=f.read(10)
    print(str2)
    str3=f.read(2)
    print(str3)
    
    
    '''
    输出:
    def proces
    sF
    总结:文件不关闭的情况下,读完一次,指针在最后边,继续读2个字符信息。
    '''
    
    
    # 3 方法3-每次读取一行数据,包括‘
    ’
    # str4=f.readline()
    str4=f.readline(10)     #表示读取一行的10个字符
    print(str4)
    
    
    # 4 方法4-读取方式4  读取所有行并返回列表
    list7=f.readlines()
    list7=f.readlines(22)     #每行读取这么多
    print(list7)

    (3)关闭文件

    # 第三步:关闭文件
    f.close()

    【总结】:完整的两种读文件方式

    方法1:

    try:
        f1=open(path,'r',encoding='utf8',errors='ignore')
        print(f1.read())
    except:
        print("文件读取出错!")
    finally:
        if f1:
            f1.close()

    方法2:带with的自动关闭文件的方式

    # 方法2  with 自动关闭文件
    
    path=r'E:[AAA]全栈学习pythonday2file1.txt'
    try:
        with open(path) as file_obj:
            content=file_obj.read()
            print(content)
    except:
        print("读取失败!")

     

    一、原生态三步法写入文件

    # 文件写入
    
    # 第一步:打开文件
    path=r"E:[AAA]全栈学习pythonday2file2.txt"
    f=open(path,'w')
    
    # 第二步:写文件
    #1 这里其实只是先写入了缓冲区,但是还没得奥文件中去,需要刷新
    f.write("jiajia is a beautiful girl333 !")
    
    # 2 刷新缓冲区,就是立即写入文件,不写刷新就是关闭才能写入文件
    f.flush()
    
    # 第三步:关闭文件
    f.close()

    说明: flush()是及时就写入到文件中去,没有这个flush的话 只会等到文件关闭的时候才会被写入到文件。

    【注意】:还有就是在写入时候遇到' ' 或者是缓冲区满了也会自动刷新

    案例2:用带with自动关闭文件且追加的方式写入

    # 案例2:用带with自动关闭文件且追加的方式写入
    with open(path,'a') as file_obj:
        file_obj.write("康忙北鼻是一个帅哥!")
    
    # file_obj.flush() #这种方式是不需要刷新与关闭操作的。

    案例3

    # 1 普通写入一个文件信息
    path=r'E:[AAA]全栈学习pythonday3file1.txt'
    with open(path,'w') as f1:
        str="I love programming"
        str2="I also like write articles"
        f1.write(str)
        f1.write(str2)
    
    '''
    输出:
    发现两个写入的文件信息都在一行显示了。
    I love programmingI also like write articles
    解决办法:
    在每个str 中加上换行符即可!
    '''
    
    # 2每添加一段信息 ,带换行信息写入如何做呢!
    
    path2=r'E:[AAA]全栈学习pythonday3file2.txt'
    with open(path,'w') as f1:
        str="I love programming
    "
        str2="I also like write articles 
    "
        f1.write(str)
        f1.write(str2)
    
    '''
    输出
    I love programming
    I also like write articles 
    '''
    
    
    # 3 附加到文件file2
    with open(path2,'a') as file_obj:
        file_obj.write("i am the first one!
    ")
        file_obj.write("I AM THE SECOND ONE!
    ")
        
    '''
    输出:
    i am the first one!
    I AM THE SECOND ONE!
    '''

     

    二、二进制文件的写入

    案例1

    # 存入和读取二进制文件信息
    path = r'E:[AAA]全栈学习pythonday3file3.txt'
    with open(path,'wb') as f1:
        str_bytes='I am jiyongjia !'.encode('utf-8')
        f1.write(str_bytes)
    
    with open(path,'rb') as f2:
        str2=f2.read()
        print(str2)
        print(type(str2))
    
    '''
    输出、
    b'I am jiyongjia !'
    <class 'bytes'>
    我们发现读取的并不是字符串,所以并不好处理
    '''

    总结:我们发现读取的并不是字符串,所以并不好处理

    案例2:处理以上案例,让读取出的信息是一个str 方便处理

    # 读取
    with open(path,'rb') as f2:
        str2=f2.read()
        print(str2.decode('utf-8'))
        print(type(str2.decode('utf-8')))
    
    '''
    输出:
    I am jiyongjia !
    <class 'str'>
    这里就是提取的字符串了; 
    '''

    所以,有时候我们需要把读取到的数据进行解码才行!

    关于二进制的读写总结

    # 总结:

    如果是按照二进制打开文件的,要写入或者读取一定要编码 解码。
    # 对于二进制的读与写,要进行对应结构的编码与解码,编码和解码用相同的方式才行。中文也可以解析出。
    # 写的时候:str_bytes='I am jiyongjia嘉 !'.encode('utf-8')
    # 读的时候:str2=f2.read().decode('utf-8')

    '''
    如果不进行decode解码输出的话会是:b'I am jiyongjiaxe5x98x89 !' 它是一个 <class 'bytes'> 非字符串,不好操作、
    如果使用了decode 解码再输出的话,输出结果是一个I am jiyongjia嘉 ! 它是一个 <class 'str'>
    '''

    方法一:使用pickle库 来进行读写

    import pickle     #引入数据持久性模板
    
    
    
    # 1--使用 pickle 方式写入进去。
    mylist = [1,2,3,4,5,6,"jiajia","我是雷锋"]
    # 把这个list写入文件4
    path = r'E:[AAA]全栈学习pythonday3file4.txt'
    f= open(path,'wb')    #打开
    pickle.dump(mylist,f)
    f.close()             #关闭
    
    
    # 读取出来、
    f2= open(path,'rb')    #打开
    templist=pickle.load(f2)
    print(templist)
    f2.close()             #关闭
    
    
    '''
    输出:
    [1, 2, 3, 4, 5, 6, 'jiajia', '我是雷锋']
    '''

    方法二:使用json库 来进行读写

    说明:

    json 文件 非常有用,因为我们往往需要在关闭程序前把程序所处理得到的数据进行保存,在下一次打开程序的时候再加载这些数据,这就要用到json。而且 json 数据是一种通用格式,通过json 就可以把数据打包分享给其他语言的程序员使用了,便于跨平台操作。

    # 说明:
    # json 文件 非常有用,因为我们往往需要在关闭程序前把程序所处理得到的数据进行保存,
    # 在下一次打开程序的时候再加载这些数据,这就要用到json。而且 json 数据是一种通用格式,
    # 通过json 就可以把数据打包分享给其他语言的程序员使用了,便于跨平台操作。
    
    import json
    
    # 1 把列表存入到json 文件  即json.dump
    list1=[1,12,3,4,5,6,"嘉嘉","jiajai"]
    dict1={"1":"puyhon学习",'2':"Java学习"}
    
    path= r'E:[AAA]全栈学习pythonday3jsonfile1.json'
    with open(path,'w') as json_file:
        json.dump(list1, json_file)
       
    
    # 2 把json文件中的内容取出  即json.load
    path= r'E:[AAA]全栈学习pythonday3jsonfile1.json'
    with open(path) as f2:
        file=json.load(f2)
        print("welcome back! 提取内容是:",file)

  • 相关阅读:
    求单源最短路径两顶点最短距离(BFS)
    运用DFS算法解决的图的相关算法应用
    关于图的简单路径,输出、是否存在等总结
    邻接表与邻接矩阵互换
    Weblogic WLS-WebServices组件反序列化漏洞复现
    Android测试(四)——内容供应器泄露
    Android测试(三)——APK文件反编译
    漏洞复现——Apache SSI远程命令执行
    漏洞复现——Apache HTTPD多后缀解析漏洞
    漏洞复现——httpd换行解析漏洞
  • 原文地址:https://www.cnblogs.com/jiyongjia/p/9814122.html
Copyright © 2020-2023  润新知