文件

  • 长久保存信息的一种数据信息集合
  • 常用操作
    • 打开关闭(文件一旦打开,需要关闭操作)
    • 读写内容
    • 查找

open函数

  • open函数负责打开文件,带有很多参数
  • 第一个参数: 必须有,文件的路径和名称
  • mode:表明文件用什么方式打开
    • r:以只读方式打开
    • w:写方式打开,会覆盖以前的内容
    • x:创建方式打开,如文件已经存在,报错
    • a:append方式,以追加的方式对文件内容进行写入
    • b: binary方式,二进制方式写入
    • t: 文本方式打开
    • +: 可读写
# 打开文件,用写的方式
# r表示后面字符串内容不需要转义
# f称之为文件句柄
f = open(r"test01.txt", 'w')
# 文件打开后必须关闭
f.close()

with语句

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

with open(r'test01.txt', 'r') as f:
# 按行读取内容
strline = f.readline()
# 此结构保证能够完整读取文件知道结束
while strline:
print(strline)
strline = f.readline()
# list能用打开的文件作为参数,把文件内每一行内容作为一个元素

with open(r'test01.txt', 'r') as f:
# 以打开的文件f作为参数,创建列表
l = list(f)
for line in l:
print(line)
# read是按字符读取文件内容
# 允许输入参数决定读取几个字符,如果没有制定,从当前位置读取到结尾
# 否则,从当前位置读取指定个数字符 with open(r'test01.txt', 'r') as f:
strChar = f.read(1)
print(len(strChar))
print(strChar)

seek(offset, from)

  • 移动文件的读取位置,也叫读取指针
  • from的取值范围:移动的单位是字节(byte)
    • 0: 从文件头开始偏移
    • 1:从文件当前位置开始偏移
    • 2: 从文件末尾开始偏移
  • 一个汉子由若干个字节构成
  • 返回文件只针对 当前位置
# seek案例
# 打开文件后,从第5个字节出开始读取 # 打开读写指针在0处, 即文件的开头
with open(r'test01.txt', 'r') as f:
# seek移动单位是字节
f.seek(6, 0)
strChar = f.read()
print(strChar)

文件的写操作-write

  • write(str): 把字符串写入文件
  • writeline(str): 把字符串按行写入文件
  • 区别:
    • write函数参数只能是字符串
    • writerline参数可以是字符串,也可以是字符序列
# write 案例
# 1. 向文件追加一句诗 # a代表追加方式打开
with open(r'test01.txt', 'a') as f:
# 注意字符串内含有换行符
f.write("生活不仅有眼前的苟且, \n 还有远方的苟且")
# 可以直接写入行, 用writelines
# writelines表示写入很多行,参数可以是list格式 # a代表追加方式打开
with open(r'test01.txt', 'a') as f:
# 注意字符串内含有换行符
f.writelines("生活不仅有眼前的苟且")
f.writelines("还有远方的枸杞")

持久化 - pickle

  • 序列化(持久化,落地):把程序运行中的信息保存在磁盘上
  • 反序列化: 序列号的逆过程
  • pickle: python提供的序列化模块
  • pickle.dump:序列化
  • pickle.load:反序列化
# 序列化案例
import pickle age = 19 with open(r'test01.txt', 'wb') as f:
pickle.dump(age, f)
# 反序列化案例

import pickle

with open(r'test01.txt', 'rb') as f:
age = pickle.load(f)
print(age)

持久化-shelve

  • 持久化工具
  • 类似字典,用kv对保存数据,存取方式跟字典也类似
  • open, close
# 使用shelve创建文件并使用
import shelve # 打开文件
# shv相当于一个字典
shv = shelve.open(r'shv.db') shv['one'] = 1
shv['two'] = 2
shv['three'] = 3 shv.close()
# shelve读取案例
shv = shelve.open(r'shv.db') try:
print(shv['one'])
print(shv['threee'])
except Exception as e:
print("烦死了")
finally:
shv.close()

shelve特性

  • 不支持多个应用并行写入

    • 为了解决这个问题,open的时候可以使用flag=r
  • 写回问题
    • shelv恶魔人情况下不会等待持久化对象进行任何修改
    • 解决方法: 强制写回:writeback=True
# shelve 之只读打开
import shelve shv = shelve.open(r'shv.db', flag='r') try:
k1 = shv['one']
print(k1)
finally:
shv.close()
import shelve

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

06-File-文件的更多相关文章

  1. FILE文件流的中fopen、fread、fseek、fclose的使用

    FILE文件流用于对文件的快速操作,主要的操作函数有fopen.fseek.fread.fclose,在对文件结构比较清楚时使用这几个函数会比较快捷的得到文件中具体位置的数据,提取对我们有用的信息,满 ...

  2. File文件的使用

    线程的停止: 1.停止一个线程一般是通过一个变量来控制 2.如果需要停止一个处于一个等待状态的线程,那么需要配合interrupture方法来完成 守护线程:(后台线程):在一个进程中只剩下守护线程, ...

  3. Python学习(16)File(文件)方法

    Python File(文件) 方法 file 对象使用 open 函数来创建,下表列出了 file 对象常用的函数: 序号 方法及描述 1 file.close() 关闭文件.关闭后文件不能再进行读 ...

  4. android内核读取file文件

    内核读取file文件的方法: char* file_read(const char * file_path) { struct file *file = NULL; //保存打开文件的文件指针变量 s ...

  5. Java文件操作二:File文件的方法

    一.文件的判断方法 判断方法 .boolean canExecute()判断文件是否可执行 .boolean canRead()判断文件是否可读 .boolean canWrite() 判断文件是否可 ...

  6. Java file文件的写入和读取及下载

    File文件的写入 一.FileWriter 和BufferedWriter 结合写入文件 FileWriter是字符流写入字符到文件.默认情况下,它会使用新的内容代替文件原有的所有内容,但是,当指定 ...

  7. js 实现 input type="file" 文件上传示例代码

    在开发中,文件上传必不可少但是它长得又丑.浏览的字样不能换,一般会让其隐藏点其他的标签(图片等)来时实现选择文件上传功能 在开发中,文件上传必不可少,<input type="file ...

  8. file和file文件流

    **io流是程序中比较常用的功能,基本上涉及到文件上传下载的都要用到这功能,比如上传头像,上传附件等等. 对于一个java程序员来说,io流也是必须掌握的,因此这里对比较常用的或者说曾经用过的方法进行 ...

  9. js获取input file文件二进制码

    <html> <body> <img id="image"src=""/> <br/> <input ty ...

  10. js 图片base64转file文件的两种方式

    js 图片base64转file文件的两种方式 https://blog.csdn.net/yin13037173186/article/details/83302628 //将base64转换为bl ...

随机推荐

  1. Angular前端开源框架

    1.  项目框架介绍 本项目采用了开源项目ngx-admin作为脚手架.基于Angular 8 +,Bootstrap 4+和Nebular,ngx-admin是最受欢迎的后台管理模板,是用于个人和商 ...

  2. Java——API文档

    Sun下载JDK--解压缩--javadoc文件(Constuctor Summary[构造方法]+Method Summary[方法])   [Object]   Object类是所有Java类的根 ...

  3. 支持向量机(四)----序列最小最优化算法SMO

    在支持向量机(二)和(三)中,我们均遗留了一个问题未解决,即如何求解原问题的对偶问题: 在支持向量机(二)中对偶问题为: 在支持向量机(三)中的对偶问题为: 对于上述两个对偶问题,我们在支持向量机(三 ...

  4. nginx做反向代理时出现302错误(转载)

    现象:nginx在使用非80端口做反向代理时,浏览器访问发现返回302错误 详细现象如下: 浏览器请求登录页: 输入账号密码点击登录: 很明显登录后跳转的地址少了端口号. 原因:proxy.conf文 ...

  5. Redis的消息订阅/发布 Utils工具类

    package cn.cicoding.utils; import org.json.JSONException; import org.json.JSONObject; import redis.c ...

  6. python条件判断之直接加数字

    if 后面跟的是条件表达式,条件表达式的结果为True或者False. (1)如果if后面的条件是数字,只要这个数字不是0,python都会把它当做True处理,见下面的例子: if 3: print ...

  7. postgresql获取表最后更新时间(通过发布订阅机制将消息发送给应用程序)

    一.创建测试表 CREATE TABLE weather( city ), temp_lo int, --最低温度 temp_hi int, --最高温度 prcp real, --湿度 date d ...

  8. MySQL删除外键约束问题

    当我们在一个表中添加字段约束的时候: ALTER TABLE product ADD CONSTRAINT product_fk FOREIGN KEY(category_id) REFERENCES ...

  9. vue引入静态js文件

    由于一些演示,需要对编码名称等可快速进行修改,需要页面方便配置.由于build后的vue项目基本已经看不出原样,因此需要创建一个文件,并在打包的时候不会进行编译. vue-cli 2.0的作法是在st ...

  10. Linux内核调试方法总结之内核通知链

    Linux内核通知链notifier 1.内核通知链表简介(引用网络资料)    大多数内核子系统都是相互独立的,因此某个子系统可能对其它子系统产生的事件感兴趣.为了满足这个需求,也即是让某个子系统在 ...