Python的读写操作

来着大拿老师的Python笔记

一、文件的读操作

一、open函数

'''
第一个参数必须有,表示文件路径和名称
mode:表示文件用什么方式打开
r:以只读方式打开
w:以写方式打开,会覆盖以前的内容
x:以创建方式打开,如文件以存在,则会报错
a:append方式打开,以追加的方式对文件内容进行写入
b:binary方式,二进制方式对文件内容写入
t:文本方式打开
+:可读写方式打开
'''

#打开文件,用写的方式
#r表示后面字符串内容不需转义
#f称之为文件句柄
f = open(r'E:/所思所感/关于做人.txt','w')

#文件打开后必须关闭
f.close()

二、with语句

#with语句
#with语句使用的技术是一种成为上下文管理协议的技术
#自动判断文件的作用域,自动关闭不在使用的打开的文件句柄

#这里我是用UTF-8编码格式
with open(r"E:/所思所感/关于做人.txt",'r',encoding='UTF-8') as f:
    #本模块中不需要使用close关闭文件
    #按行读取内容
    strline = f.readline()
    #保证完整读取文件直到结束
    while strline:
        print(strline)
        strline = f.readline()
with open(r"E:/所思所感/关于做人.txt",'r',encoding='UTF-8') as f:
    #创建列表
    l = list(f)
    for line in l:
        print(line)
#read是按字符读取文件内容,允许输入参数决定读取自己自己字符,如果没有指定,默认从当前位置读到结尾
with open(r"E:/所思所感/关于做人.txt",'r',encoding='UTF-8') as f:
    strChar = f.read()
    print(len(strChar))
    print(strChar)

#读3个换一行
with open(r"E:/所思所感/关于做人.txt",'r',encoding='UTF-8') as f:
    #read参数的单位是字符,可以理解为一个汉字
    strChar = f.read(3)
    while strChar:
        print(strChar)
        strChar = f.read(3)

#tell函数
#用来显示文件读写指针的当前位置
with open(r"E:/所思所感/关于做人.txt",'r',encoding='UTF-8') as f:
    #read参数的单位是字符,可以理解为一个汉字
    strChar = f.read(3)
    pos = f.tell()
    while strChar:
        print(pos)
        print(strChar)
        
        strChar = f.read(3)
        pos = f.tell()
        
    #tell的返回数字的单位是byte

三、seek

#seek(offset,from)
#from的取值范围
'''
0:从文件头开始偏移
1:从文件当前位置开始偏移
2:从文件末尾开始偏移
'''
#移动的单位是字节(byte)
#一个汉字由果敢个字节构成
#返回文件只针对当前位置
#案例:打开读写指针在0处,即文件的开头
with open(r"E:/所思所感/关于做人.txt",'r',encoding='UTF-8') as f:
    #seek移动单位是字节
    f.seek(8,0)#这里如果字节没有选对的话,会报错
    strChar = f.read()
    print(strChar)

二、文件的写操作

#文件的写操作write
'''
write(str):把字符串写入文件
writeline(str):把字符串按行写入文件
write函数参数只能是字符串
writelines参数可以是字符串也可以是字符序列
'''

#以追加的方法打开
with open(r'E:/所思所感/关于做人.txt','a',encoding='UTF-8') as f:
        f.write("\n7.尽人事,听天命")
        f.writelines("\n8.接下来就无所谓吧\n")
        l = ['I','love','you']
        f.writelines(l)

三、序列化/持久化

'''
序列化(持久化):把程序运行中的信息保存在磁盘上
反序列化:序列化的逆过程
pickle:python提供的序列化模块
pickle.dump:序列化
pickle.load:反序列化
'''
#序列化案例
import pickle
age = 19
with open(r'E:/所思所感/关于不做人.txt','wb') as f:
    pickle.dump(age,f)

#反序列化案例
import pickle
age = 19
with open(r'E:/所思所感/关于不做人.txt','rb') as f:
    age = pickle.load(f)
    print(age)
    
    '''
    19
    '''
import pickle
a = [19,'wihiudqwb',[909,20]]
with open(r'E:/所思所感/关于不做人.txt','wb') as f:
    pickle.dump(a,f)
with open(r'E:/所思所感/关于不做人.txt','rb') as f:
    a = pickle.load(f)
    print(a)
'''
[19, 'wihiudqwb', [909, 20]]
'''
#持久化
'''
持久化工具
类似字典,用kv保存数据,存取方式跟字典也类似
open/close
'''
import shelve

#使用shelve创建文件并使用,并不止创建一个shv.db文件,还有其他
#shv相当于一个字典
shv = shelve.open(r'shv.db')

shv['one'] = 1
shv['two'] = 2
shv['three'] = 3

shv.close()

    
#看看读取案例
shv = shelve.open(r'shv.db')
print(shv['one'])
print(shv['two'])
shv.close()
'''
1
2
'''
#shelve特性:
#写入问题:不支持多个应用并行写入,为了解决这个问题,open的时候可以使用flag=r
#写回问题:shelve默认情况下不会等待持久化对象进行任何修改,解决方式:强制写回writeback=True
shv = shelve.open(r'shv1.db')
try:
    shv['one'] = {'eins':1,"zwei":2}
finally:
    shv.close()
    
shv = shelve.open(r'shv1.db')
try:
    one = shv['one']
    print(one)
    #此时,一旦shelve关闭,则内容还是存在于内存中,没有写回数据库
    one['enis'] = 100
finally:
    shv.close()
    
shv = shelve.open(r'shv1.db')
try:
    k1 = shv['one']
    print(k1)
finally:
    shv.close()

'''
并未发生修改
{'eins': 1, 'zwei': 2}
{'eins': 1, 'zwei': 2}
'''

shv = shelve.open(r'shv1.db')
try:
    shv['one'] = {'eins':1,"zwei":2}
finally:
    shv.close()
    
shv = shelve.open(r'shv1.db',writeback=True)#强制写回
try:
    one = shv['one']
    print(one)
    #此时,一旦shelve关闭,则内容还是存在于内存中,没有写回数据库
    one['enis'] = 100
finally:
    shv.close()
    
shv = shelve.open(r'shv1.db')
try:
    k1 = shv['one']
    print(k1)
finally:
    shv.close()

'''
已经发生了修改
{'eins': 1, 'zwei': 2}
{'eins': 1, 'zwei': 2, 'enis': 100}
'''

#使用with来打开
with shelve.open(r'shv1.db',writeback=True) as shv:
    k1 = shv['one']
    print(k1)
    k1['eins'] = 1000
    
with shelve.open(r'shv1.db') as shv:
    print(shv['one'])
'''
{'eins': 1, 'zwei': 2, 'enis': 100}
{'eins': 1000, 'zwei': 2, 'enis': 100}
'''

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值