houziaipangqi

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

#文件常用操作
  -打开关闭(一旦打开,必须要有关闭操作)
  -读写内容
  -查找

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

#打开文件,用写的方式
#r表示后面字符串内容不需要转译
#f称为文件句柄
f = open(r"test01.txt","w")
#文件打开后必须关闭
f.close()

#此案例说明,以写方式打开文件,如果没有,则会自动创建

 

#with语句
-with语句使用的是一种上下文管理协议的技术(Context Management Protocal)
-自动判断文件的作用域,自动关闭已经打开的文件

#with语句案例-1
with open(r"text.01","r") as f:
    pass
    #下面语句块开始对f进行操作
    #在本模块中不需要再用close关闭文件了
    
#with语句案例-2
with open(r"text.01", "r") as f:
    #按行读取内容
    strline = f.readline()
    #此结构能够保证完整读取文件直到结束
    while strline:
        print(strline)
        strline = f.readline()

#list能用打开的文件作为参数,把文件每一行内容都作为一个元素全部读取

with open(r"text.01", "r") as f:
     #以打开的文件f作为参数,创建列表
     l =list(f)
     for line in l:
        pring(line)

 

#read是按字符读取文件内容
#允许输入参数决定读取几个字符,如果没有指定,则从当前位置读取到结尾
#否则,从当前位置读取指定的字符

with open(r"text.01", "r") as f:
    strChar = f.read()
    print(len(strChar))
    print(strChar)

 

#seek(offset,from)
-移动文件的读取位置,也叫读取指针
-from的取值范围:
  - 0: 从文件开始偏移
  - 1:从文件当前位置开始偏移
  - 2:从文件末尾开始偏移
-移动的单位是字节(byte)
-一个汉子由3个字节构成

#seeka案例
#打开文件后,从第5个字节开始读取
#打开读写指针在0处,即文件的开头    
with open(r"text.01", "r") as f:
    #seek移动单位是字节
    f.seek(6,0)
    strChar = f.read()
    print(strChar)

 

#关于读取文件的练习
#打开文件,三个字符一组读出内容,然后显示在屏幕上
#每读取一次,休息一秒钟

import time
with open(r"test01.txt", "r") as f:
    strChar = f.read(3)
    while strChar:
        print(strChar)
        strChar = f.read(3)
        time.sleep(1)

 

#tell函数:用来显示文件读写指针的当前位置

with open(r"test01.txt", "r") as f:
    strChar = f.read(3)
    pos = f.tell()
    while strChar:
        print(pos)
        print(strChar)
        
        starChar = f.read(3)
        pos = f.tell()
#tell函数返回的数字是以字节为单位的
#read是以字符为单位的

 

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

#write案例
#1.向文件追加内容
#a代表追加方式代开
with open(r"test01.txt", "a") as f:
    f.write(“pangqi shi zhu”)

#可以直接写入行,用writelines
#writelines表示写入很多行,参数可以是list格式
l = ["houzi","love","pangqi"]
with open(r"test01.txt", "a") as f:
    f.writelines(l)

 

#持久化-pickle
-序列化(持久化,落地):把程序运行中的信息保存在磁盘上
-反序列化:序列化的逆过程
-pickle:python提供的序列化魔模块
-pickle.dump:序列化
-pickle.load:反序列化

#序列化案例
import pickle
age = 19
with open(r"test01.txt","wb") as if:
    pickle.dump(age,f)
    
#反序列化案例
import pickle
with open(r"test01.txt","rb") as if:
    age = pickle.load(f)

 

#持久化-shelve

-持久化工具
-类似字典,用kv对来保存数据,获取方式跟字典类似
-open, close

#使用shelve创建文件并使用
import shelve
#打开文件,shev相当于一个字典
shv = shelve.open(r"shv.db")
shv["one"] = 1
shv.close()
#shelve读取
shv = shelve.open(r"shev.db")
print(shv["one"])
shv.close()

 

#shelve特性
-不支持多个应用并行写入
  -为了解决这个问题,open的时候可以使用flag = r

posted on 2018-09-12 20:42  houziaipangqi  阅读(134)  评论(0编辑  收藏  举报