文件

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

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. vueroute的router.addRoutes

    router.addRoutes(routes: Array<RouteConfig>)动态添加更多路由到路由器.参数必须是使用与routes构造函数选项相同的路径配置格式的Array .

  2. 软件安装——彻底卸载MySQL

    如果你的电脑里装过MySQL,想再重新安装MySQL的时候可能就会因为前一版本卸载不彻底而出现错误.最常见的就是安装好后设置参数的最后一步验证时,会在Execute configurattion步骤中 ...

  3. Spring——IOC与Bean容器

    [IOC] (1)IOC:控制反转,控制权的转移,应用程序本身不负责依赖对象的创建和维护,而是由外部容器负责创建和维护.也就是说由IOC容器在运行期间,动态地将某种依赖关系注入到对象之中 (2)DI: ...

  4. [洛谷2257]ZAP-Queries 题解

    前言 这道题还是比较简单的 解法 首先将题目转化为数学语言. 题目要我们求的是: \[\sum_{i=1}^a\sum_{j=1}^b[gcd(i,j)=d]\] 按照套路1,我们将其同时除以d转换为 ...

  5. 【CF1256F】Equalizing Two Strings(逆序对)

    题意:给定两个长度均为n且由小写字母组成的字符串,可以进行若干次操作,每次从两个串中分别选一个长度相等的子串进行翻转,问是否存在能使两串相等的一系列操作方案 n<=2e5 思路:首先如果每种字母 ...

  6. Improving Network Management with Software Defined Networking

    Name of article:Improving Network Management with  Software Defined Networking Origin of the article ...

  7. leetcode-mid-array-5. Longest Palindromic Substring

    mycode   12.51% class Solution(object): def longestPalindrome(self, s): """ :type s: ...

  8. Python编程:从入门到实践—列表

    访问列表中的元素 >>> bicycles = ['trek','cannondale','redline','specialized']>>> print(bic ...

  9. LinkedBlockingDeque 源码分析

    LinkedBlockingDeque LinkedBlockingDeque 能解决什么问题?什么时候使用 LinkedBlockingDeque? 1)LinkedBlockingDeque 是基 ...

  10. thinkphp5.0学习笔记(二)API后台处理与命名空间

    命名空间 先来看命名空间吧: 命名空间是学习TP的基础, <?php namespace app\lian\c1; class yi{ public $obj = "这是第一个空间里面 ...