with资源释放 文件基本操作 持久化 02/22

本文介绍了Python中with资源释放的重要性,详细讲解了文件与路径的常用操作,包括open函数和fileinput模块的使用。此外,探讨了持久化技术,如pickle模块的功能和用法,强调了它支持Python所有数据类型的序列化和反序列化。同时对比了JSON模块,指出JSON适用于多语言间的交互而pickle更适合Python内部。最后提到了shelve模块,它是键值对形式的持久化存储,适用于保存pickle支持的Python数据格式。
摘要由CSDN通过智能技术生成

with资源释放

with open("a1.txt",encoding="utf-8") as f:#释放资源
    print(f.read())
    print(1 / 0)
#工作原理
class demo():
    def __enter__(self):
        print("进入enter方法")
        return "你好"
    def __exit__(self, exc_type, exc_val, exc_tb):
        print("进入exit方法")
        print("---",exc_type)
        print("---",exc_val)
        print("---",exc_tb)

def test():
    return demo()

with test() as t:
    print(t)
    print(1/0)

文件与路径常用操作

1.open函数

f = open(filename,mode)
#filename:表示文件名或者文件路径,mode:表示打开文件的模式,是可选参数,下面列表介绍 mode 有哪些可以选择
def file_open(name = ‘python.txt’):
 f = open(name)

2.用 fileinput 操作文件

import fileinput
with fileinput.input("文件名1.txt","文件名2.txt") as lines,open("新文件名.txt",mode="w") as f:
    for line in lines:
        print(f.write(line))

3…利用 os 模块进行目录操作

import os
print(os.getcwd())#获取当前目录
print(os.listdir())#获取文件目录下所有文件和文件夹
#os.mkdir("new")#创建目录
#os.rmdir("new")#删除目录
#print(os.path.isdir("new"))#判断
#print(os.path.isfile("new"))

for i in os.walk("./"):#遍历文件夹
    print(i)
def bf(path):
    list = os.listdir(path)
    for item in list:
        if os.path.isfile(os.path.join(path,item)):
            print(item)
        else:
            print(item)
            bf(os.path.join(path,item))

持久化

1、pickle模块
pickle模块将任意一个python对象转换成一系统字节的这个操作过程叫做串行化对象。
python的pickle模块实现了python的所有数据序列和反序列化。cPickle是pickle模块的C语言编译版本相对速度更快。
与JSON不同的是pickle不是用于多种语言间的数据传输,它仅作为python对象的持久化或者python程序间进行互相传输对象的方法,因此它支持了python所有的数据类型。

import pickle

data2 = [1,2,3,4]
det_str = pickle.dumps(data2)
print(det_str)

#output:  输出为二进制格式 

注:dumps和dump,load和loads的区别:
dumps是将对象序列化
dump是将对象序列化并保存到文件中
loads将序列化字符串反序列化
load将序列化字符串从文件读取并反序列化

import pickle
#将数据序列化后存储到文件中
f = open('test.txt','wb')   #pickle只能以二进制格式存储数据到文件
data = {'k1':'python','k2':'java'}
f.write(pickle.dumps(data))   #dumps序列化源数据后写入文件
f.close()

#反序列化读取源数据
import pickle
f = open('test.txt','rb')
da = pickle.loads(f.read())   #使用loads反序列化
print(da)

2、json模块
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。
JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯
(包括C、C++、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。
易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。
将obj对象格式化并存储到文件对象中,文件必须为可写的文件句柄,json只产生str对象,不支持bytes对象,所以fp.write()必须支持str输入

3、json与pickle模块的区别
1、JSON只能处理基本数据类型。pickle能处理所有Python的数据类型。
2、JSON用于各种语言之间的字符转换。pickle用于Python程序对象的持久化或者Python程序间对象网络传输,但不同版本的Python序列化可能还有差异。

4、shelve模块
shelve与pickle类似用来持久化数据的,不过shelve是以键值对的形式,将内存中的数据通过文件持久化,值支持任何pickle支持的python数据格式,它会在目录下生成三个文件。
对于存储的key,value值,只能添加key,value,可修改整个value,不能单独修改列表或字典中的元素

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值