zoukankan      html  css  js  c++  java
  • python文件操作

    python文件操作

           文件操作是编程中必不可少的,配置文件,数据存储都是对文件操作。

    一、python内置函数open()

           1、语法格式:

           open(file, mode=’r’, buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

           此函数能够打开一个文件并返回文件对象。如果文件不能打开,则抛出操作系统异常OSError

           2、参数

    • 参数file是一个类似路径的对象,可以是字符串或数组表示的文件名称,文件名称是要打开文件的路径(绝对路径或者相对路径)。
    • 参数mode是指明打开文件的模式。
               ‘r’:只读模式打开文件,不可写入,此为参数默认值。
               ‘w’:写入模式打开文件,并且清空打开的文件。
                ‘x’:独占模式打开文件,如果文件已经打开,则会打开失败。
                ‘a’:写入模式打开文件,如果文件存在,则在文件末尾追加内容。
                ‘b’:二进制模式,例如读取声音、图像文件。
                ‘t’:文本模式,此为参数默认值。
                ‘+’:打开文件进行更新,可以读取或写入。
    • 参数buffering为可选参数,用于缓冲区的策略选择。
    • 参数encoding为文件编码,仅适用于文本文件。

    • 参数errors为编解码错误时进行的处理,但不能在二进制模式下使用。
    • 参数newline为文本模式指定下一行的结束符。可以是None,”, , , 等。

    • 参数closefd用于传入的文件句柄,当退出文件时,不关闭文件句柄。
    • 参数opener用于实现自己定义打开文件方式。

    二、文件的打开和关闭
     
    #在Windows操作系统下打开文件,默认使用GBK编码打开,
    #文本文件的写入utf8编码格式,打开也需要用utf8编码格式。
    file=open('xx.txt',encoding='utf8')   #相对路径
    file.read()      #打开文件
    file.close()     #关闭文件
    

      

    三、文件路径

           绝对路径:从电脑盘符开始的路径

                  在windows系统里,文件夹之间用 分隔

                  在非windows系统里,文件夹之间用 / 分隔
     
           相对路径:当前文件所在的文件夹开始的路径
                  'xx.txt'(或 ./xx.txt):当前文件夹
                  'demo/xx.txt':下级文件夹
                  '../xx.txt':上级文件夹
     
           路径书写的三种方式:1、' \ ' 2、r ' ' 3、' / ' ( 推荐使用 )

     
    四、文件打开方式
    • ' r ':只读模式,默认,打开文件后,只能读取,不能写入。如文件不存在,会报错。
    • ' w ':写入模式,打开文件后,只能写入,不能读取。如果文件存在会覆盖文件,如果不存在,会创建文件。
    • ' b ':以二进制形式打开文件。

    • ' a ':追加模式,会在最后追加内容。
    • ' r+ ',' w+ ':可读可写,很少用

    file=open('xx.txt','rb')
    print(file.read())      #二进制读取  b'xe5xa5xbdxe5xa5xbdxe5xad'
    
    file1=open('xx.txt','wb')
    file1.write('好好学习'.encode('utf8'))  #二进制写入,转成文本
    

      

    五、文件读取方式

    file=open('aa.txt',encoding='utf8')
    file.read()     #读取所有数据
    file.readline()    #读取一行
    file.readlines()    #读取所有数据,存入列表,每行为一个列表项
    file.read(n)      #读取n的长度
    

      

    六、文件拷贝

    import os
    
    old_file_name=input('请输入文件名:')
    if os.path.isfile(old_file_name):
        names=old_file_name.rpartition('.')
        new_file_name=names[0]+'.bak.'+names[2]
        old_file=open(old_file_name,'rb')
        new_file=open(new_file_name,'wb')
        while True:
            content=old_file.read(1024)
            new_file.write(content)
            if not content:
                break
        new_file.close()
        old_file.close()
    

      

    七、将数据写入内存

           将数据写入内存涉及到类StringIO
    from io import StringIO
    
    s_io=StringIO()
    print('hello ',file=s_io,end='')    #控制台不显示
    print('world!',file=s_io)           #控制台不显示
    print(s_io.getvalue())              #控制台输出'hello world!'
    s_io.close()
    

      

     八、json字符串

           文件的write,只能写入字符串或二进制,字典、列表、数字都不能写入到文件里。

           将数据转化为字符串有两种方式:1、repr/str 方法 2、使用json模块

           json本质就是字符串,区别在于json里用双引号表示字符串。
     

     列表的序列化dumps()

    import json
    names=['Jack','Rose','Merry']
    name_json=json.dumps(names)
    file=open('names.txt','w',encoding='utf8')
    file.write(name_json)
    file.close()
    

      

    列表的序列化dump()

    import json
    names=['Jack','Rose','Merry']
    file=open('names.txt','w',encoding='utf8')
    json.dump(names,file)
    file.close()
    

      

    反序列化成字典loads()

    import json
    x='{"name":"Rose","age":18}'    #json字符串
    p=json.loads(x)
    

      

    反序列化成字典load():读取一个文件,并把文件里的json字符串加载为一个对象

    import json
    file=open('names.txt','r',encoding='utf8')  #names.txt {"name":"Jack"}
    y=json.load(file)
    file.close()
    

      

    九、pickle的使用

           将python里的对象转化为二进制

           序列化:dumps()

           反序列化:loads()

    import pickle
    num1=['zhangsan','lisi','wangwu']
    p=pickle.dumps(num1)   #列表序列化成二进制
    file=open('name1.txt','wb')
    file.write(p)    #写入序列(二进制)
    file.close()
    
    file1=open('name1.txt','rb')
    q=file1.read()
    r=pickle.loads(q)   #发序列化列表
    print(r)
    

      

           序列化dump()

           反序列化load()

    import pickle
    num1=['zhangsan','lisi','wangwu']
    file3=open('name3.txt','wb')
    pickle.dump(num1,file3)    #二进制序列化之name3.txt
    file3.close()
    
    file4=open('name3.txt','rb')
    y=pickle.load(file4)   #二进制加载到Python数据
    file4.close()
    
           pickle:用来原封不动的转换成二进制,但是只能在Python里识别。

           json:只能保存部分信息,作用是用来在不同的平台里传输数据。json里存储的数据是基本的数据类型。

     

  • 相关阅读:
    走向变态的人生
    HDWIKI 4.0.2绿色版(含运行环境)(V1)
    centos7 安装python3.7.1
    一种高并发流控程序的简单轻量实现
    编写JDBC框架优化CRUD操作
    一段阻塞队列代码的纠错与优化
    一次请求在同一个事务实现
    创建Java内部类的编译错误处理
    C++模板简单分析与举例
    java.lang.OutOfMemoryError处理错误
  • 原文地址:https://www.cnblogs.com/shixiaoxun/p/14495226.html
Copyright © 2011-2022 走看看