zoukankan      html  css  js  c++  java
  • 文件操作和序列化

    文件操作

    通过内置的open()函数打开一个文件对象。

    格式:fd=open('filename')

    以不同模式打开一个文件对象:

    模式描述
    r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
    rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。
    r+ 打开一个文件用于读写。文件指针将会放在文件的开头。
    rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。
    w 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
    wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
    w+ 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
    wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
    a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
    ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
    a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
    ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

    示例:

    [xxoo:/tmp]$ cat tmpfile
    hello
    world

    只读方式:

    #!/usr/bin/env python
    file=open('tmpfile','r')
    print(file.read().strip())
    file.close() #关闭文件操作

    写方式:

    #!/usr/bin/env python
    file=open('tmpfile','w')
    file.write("12345 ")
    file.close()

    再次查看tmpfile 输出:12345

    方法:

          file.close() #关闭文件操作

          file.flush() #刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件 (可以通过time.sleep()函数 观察写入的数据 磁盘刷新情况)

          file.fileno() #返回一个整型的文件描述符

          file.isatty() #如果文件连接到一个终端设备返回 True,否则返回 False

          file.read([size]) #从文件读取指定的字节数,未给定size或size为负数时读取所有数据

          file.readline() #读取整行

          file.readlines() #读取所有行并返回列表

          file.seek(offset[,whence]) #设置当前文件位置

          file.tell() #返回文件当前位置

          file.truncate([size]) #截取文件,截取的字节通过size指定,从文件开始位置截取

          file.write(str) #将str写入到文件中

          file.writelines(sequence) #向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。

    以上对文件操作并不推荐,写数据时存在数据丢失情况      

    推荐使用:  with open(filename,'rw') as fd:

                           fd.write(str)                       

    序列化

    通过将对象序列化可以将其存储在变量或者文件中,可以保存当时对象的状态,实现其生命周期的延长。并且需要时可以再次将这个对象读取出来。

    json.dumps()

    用于将dict类型的数据转成str,因为如果直接将dict类型的数据写入json文件中会发生报错,因此在将数据写入时需要用到该函数。

    #!/usr/bin/env python
    import json
    name_emb = {'name':'python','age':'20'}
    jsObj = json.dumps(name_emb)
    print(name_emb)
    print(jsObj)
    print(type(name_emb))
    print(type(jsObj))
    输出:
          {'name': 'python', 'age': '20'}
          {"name": "python", "age": "20"}
          <class 'dict'>
          <class 'str'>

    json.loads()  

    用于将str类型的数据转成dict。

    #!/usr/bin/env python
    import json
    name_emb = {'name':'python','age':'20'}
    jsDumps = json.dumps(name_emb)
    jsLoads = json.loads(jsDumps)
    print(name_emb)
    print(jsDumps)
    print(jsLoads)
    print(type(name_emb))
    print(type(jsDumps))
    print(type(jsLoads))
    输出:
          {'age': '20', 'name': 'python'}
          {"age": "20", "name": "python"}
          {'age': '20', 'name': 'python'}
          <class 'dict'>
          <class 'str'>
          <class 'dict'>    

    json.dump()

    用于将dict类型的数据转成str,并写入到json文件中。

    #!/usr/bin/env python
    import json
    name_emb = {'name':'python','age':'20'}
    emb_filename = ('emb_json.json')
    f=open(emb_filename, "w")
    json.dump(name_emb,f)
    
    cat emb_json.json 输出:{"name": "python", "age": "20"}

    json.load()

    用于从json文件中读取数据。

    #!/usr/bin/env python
    import json
    f=open('emb_json.json','r')
    data=json.load(f)
    print (type(data))
    for k,v in data.items():
        print (k,v)
    输出:
          <class 'dict'>
          name python
          age 20

    赠人玫瑰,手有余香,如果我的文章有幸能够帮到你,麻烦帮忙点下右下角的推荐,谢谢!

    作者: imcati

    出处: https://www.cnblogs.com/imcati/>

    本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 原文链接

  • 相关阅读:
    复利结对项目 增添
    结对编程-对队友的评价
    复利结对项目
    阅读《构造之法》第4章有感
    单元测试
    实验一 命令解释程序cmd的编写
    阅读《构造之法》1、2、3章有感
    复利计算
    实验总结
    汉堡包评价
  • 原文地址:https://www.cnblogs.com/imcati/p/9537759.html
Copyright © 2011-2022 走看看