当前位置: 首页 > article >正文

Python-13(永久存储)

创建并打开文件

open(file,mode)函数

该函数用于打开一个文件并返回对应的文件对象。

file参数指定的是文件路径和文件名,如果没有添加路径,那么默认将文件创建在python的主文件夹里面。mode参数指定的是打开的模式,r表示读取(默认)、w表示写入、x表示排他性创建文件(如果文件已存在则打开失败)、a表示在文件末尾追加内容、+表示更新文件(读取和写入)。

open("file.txt","w")

 

注意:如果已经是一个文件对象,那么可以直接调用open方法,不需要传递第一个参数。

from pathlib import Path
p = Path.cwd()/"file.txt"
f = p.open("w")
f.write("hello")
f.close()

 

write()方法

该方法将字符串写入对象文件中,并返回写入的字符数量(字符串长度)。

f = open("file.txt","w")
print(f.write("I LOVE Python"))

writelines()方法

将多个字符串写入到文件对象中,不会自动添加换行符,所以通常是人为的加在每个字符串的末尾。此方法没有返回值。

f = open("file.txt","w")
f.writelines(["I love you\n","You love me\n"])

close()方法

该方法用于关闭文件对象,当文件对象关闭之后才能将之前传入的字符串写入文件。

readable()方法

该方法用于判断文件对象是否支持读取。支持则返回True,否则返回False。

writeable()方法

该方法用于判断文件对象是否支持写入。支持则返回True,否则返回False。

f = open("file.txt","r+")
print(f.readable())
print(f.writable())

for读取

python的文件是支持迭代的,我们可以将文件放到for语句里面实现读取。

f = open("file.txt","r+")
for each in f:print(each)

read()方法

文件对象里面有个指针,被称之为文件指针,它负责指向文件的当前位置,当用户读取一个字符时,文件指针就会指向下一个字符,直到文件的末尾EOF。

f = open("file.txt","r+")
print(f.read())

tell()方法

该方法用于返回当前文件指针在文件对象中的位置。

f = open("file.txt","r+")
print(f.read())
print(f.tell())

seek(offset,whence)方法

修改文件指针的位置,从whence参数指定的位置(0代表文件的起始位置,1代表当前位置,2代表文件末尾)偏移offset个字节,返回值是新的索引位置。

readline(size=-1)方法

从文件对象中读取指定数量的字符(或遇到EOF停止);当未指定该参数,或参数为负值的时候,读取剩余的所有字符。

flush()方法

将文件对象中的缓存数据写入到文件中(未必有效)。

truncate(pos=None)方法

将文件对象截取到pos的位置,默认是截取到文件指针当前指定的位置。pos之后的文件内容会被清除。

注意:如果将文件模式改为w,但是没有写入任何内容就直接关闭文件对象,那么文件的所有内容都会消失。

f = open("file.txt","w")
f.close()

路径处理

pathlib--面向对象的文件系统路径

from pathlib import Path:从pathlib模块中单独导入path,使用这种导入方式,在后面调用模块时就不需要加上模块名了。

cwd()方法

获取当前目录的路径。

from pathlib import Path
print(Path.cwd())

is_dir()方法

判断一个路径是否为一个文件夹。

from pathlib import Path
p = Path.cwd()
q = p/"file.txt"
print(p.is_dir())
print(q.is_dir())

is_file()方法

判断一个路径是否为一个文件。

from pathlib import Path
p = Path.cwd()
q = p/"file.txt"
print(p.is_file())
print(q.is_file())

exists()方法

检测一个路径是否存在。

from pathlib import Path
p = Path.cwd()
q = p/"hello.txt"
print(p.exists())
print(q.exists())

name属性

获取路径的最后一个部分。

from pathlib import Path
p = Path.cwd()
q = p/"hello.txt"
print(p.name)
print(q.name)

 

stem属性

获取文件名。

from pathlib import Path
p = Path.cwd()
q = p/"hello.txt"
print(p.stem)
print(q.stem)

 

suffix属性

用于获取文件的后缀。

from pathlib import Path
p = Path.cwd()
q = p/"hello.txt"
print(p.suffix)
print(q.suffix)

 

parent属性

获取其父级目录。

from pathlib import Path
p = Path.cwd()
q = p/"hello.txt"
print(p.parent)
print(q.parent)

parents属性

获取其逻辑祖先构成的一个不可变序列(可迭代对象)。其支持索引,0是父级目录,1是0的父级目录。

from pathlib import Path
p = Path.cwd()
q = p/"hello.txt"
ps = p.parents
for each in ps:print(each)
print(ps[0])
print(ps[1])

parts属性

将路径的各个组件拆分成元组。

from pathlib import Path
p = Path.cwd()
q = p/"hello.txt"
print(p.parts)

stat()方法

查询文件或文件夹的信息。

from pathlib import Path
p = Path.cwd()
q = p/"hello.txt"
print(p.stat())

修改路径

mkdir()方法

创建文件夹。如果想要创建的文件夹已经存在会报错。

from pathlib import Path
p = Path.cwd()/"hello"
p.mkdir()
p.mkdir()

如果不想进行提示,那么我们可以将exist_ok参数设置为True。

注意:如果路径中存在多个不存在的父级目录,也会报错。可以通过设置parents参数为True,创建不存在的多级目录。 

修改文件

rename()方法

修改文件名。

from pathlib import Path
p = Path.cwd()/"file.txt"
p.rename("NewFile.txt")

 

replace()方法

替换指定的文件或者文件夹。

删除文件夹或文件

rmdir()方法

用于删除文件夹。但目录不为空不会随意删除,需要显示有unlink将文件夹里面的文件删除。

unlink()方法

用于删除文件。

查找文件

glob()方法

from pathlib import Path
n = Path('.')
print(list(n.glob("*.txt")))

 

 绝对路径和相对路径

绝对路径

是文件真正存在的路径。从根目录开始一级一级的指向最终的文件或者文件夹。

相对路径

以当前目录为基准,进行一级一级的目录推导的路径。使用.(点)来表示当前所在的目录,使用两个紧挨着的.(点)来表示上一级目录。

resolve()方法

该方法可以将相对路径转换为绝对路径。

from pathlib import Path
print(Path("./file.txt"))
print(Path("./file.txt").resolve())

iterdir()方法

获取当前路径下所有子文件和子文件夹的对象。

from pathlib import Path
p = Path.cwd()
q = p/"hello.txt"
for each in p.iterdir():print(each)

with语句和上下文管理器

from pathlib import Path
with open("file.txt") as f:f.write("I love you")"""
相当于
f = open("file.txt","w")
f.write("I love you")
"""

使用上下文管理器就是上文打开文件,下文关闭文件。使用上下文管理器就不需要手动的关闭文件,文件处理的代码只需要放在with语句的缩进中。使用上下文管理器的最大优势就是能够确保资源的施放。

pickle        

解决的是永久存储Python对象的问题,允许将字符串、列表、字典这些python对象保存为文件的形式。将python对象序列化就是将python对象转换为二进制字节流的过程。

dump()方法

将数据传入pickle文件中。

import pickle
x,y,z=1,2,3
s = "py"
l = ["hello",520,1314]
d = {"one":1,"two":2}
with open("data.pkl","wb") as f:#后缀必须是pkl,wb是以二进制形式打开,二进制可写入的形式pickle.dump(x,f)pickle.dump(y, f)pickle.dump(z, f)pickle.dump(s, f)pickle.dump(l, f)pickle.dump(d, f)

load()方法

将pickle文件中的二进制数据重新读取。

import picklewith open("data.pkl","rb") as f:#后缀必须是pkl,rb是以二进制形式打开,二进制可读入的形式x = pickle.load(f)y = pickle.load(f)z = pickle.load(f)s = pickle.load(f)l = pickle.load(f)d = pickle.load(f)
print(x,y,z,s,l,d,sep="\n")

http://www.lryc.cn/news/2395420.html

相关文章:

  • 《关于有序推动绿电直连发展有关事项的通知》核心内容
  • 数据结构-排序(1)
  • 记录一次session安装应用recyclerview更新数据的bug
  • 大数据-274 Spark MLib - 基础介绍 机器学习算法 剪枝 后剪枝 ID3 C4.5 CART
  • 力扣面试150题--二叉树的锯齿形层序遍历
  • 如何在 CentOS / RHEL 上修改 MySQL 默认数据目录 ?
  • 网页前端开发(基础进阶2)
  • 简历制作要精而不简
  • SPA-RL:通过Stepwise Progress Attribution训练LLM智能体
  • 【深度学习】9. CNN性能提升-轻量化模型专辑:SqueezeNet / MobileNet / ShuffleNet / EfficientNet
  • Relational Algebra(数据库关系代数)
  • 【C/C++】面试常考题目
  • Chorme如何对于youtube视频进行画中画背景播放?
  • 017搜索之深度优先搜索——算法备赛
  • 从单机到集群,再到分布式,再到微服务
  • 关于ios点击分享自动复制到粘贴板的问题
  • Hive的JOIN操作如何优化?
  • React Native 实现抖音式图片滑动切换浏览组件-媲美抖音体验的滑动式流畅预览组件
  • 睿抗机器人开发者大赛CAIP-编程技能赛-历年真题 解题报告汇总 | 珂学家
  • 【c++】【数据结构】AVL树
  • 【原神 × 插入排序】刷圣遗物也讲算法:圣遗物评分系统背后的排序逻辑你真的懂吗?
  • ORB-SLAM2学习笔记:ExtractorNode::DivideNode和ORBextractor::DistributeOctTree函数详解
  • nt!MmMapViewInSystemCache函数分析PointerPte的填充
  • 3D Tiles高级样式设置与条件渲染(3)
  • 通义灵码深度实战测评:从零构建智能家居控制中枢,体验AI编程新范式
  • 头歌之动手学人工智能-Pytorch 之优化
  • 基于谷歌ADK的智能客服系统简介
  • (一)视觉——工业相机(以海康威视为例)
  • DAY 36 超大力王爱学Python
  • 基于React + TypeScript构建高度可定制的QR码生成器