python --基础阶段--文件操作(5)

文件介绍

数据存放的容器
文件的作用持久性的存储数据内容
文件组成文件名如果是同级目录下, 不允许同名文件存在扩展名.jpg.avi.doc.xls.html...注意一般不同的扩展名, 对应着不同的文件格式不同的文件格式, 有着不同的存储约定, 方便程序处理文件内容文本文件txtdocxls...二进制文件图片视频音乐...

文件的使用流程

打开

open("文件","模式")文件指定文件路径模式控制操作模式

模式

r以只读方式打开文件这是默认模式文件的指针将会放在文件的开头注意:文件不存在, 会报错
w以只写方式打开文件文件的指针将会放在文件的开头所以, 写入的新内容, 会覆盖旧的内容注意文件不存在, 会自动创建一个新文件
a以追加方式(只写)打开文件文件的指针将会放在文件结尾所以, 写入的内容, 会新增到文件末尾注意文件不存在, 会自动创建一个新文件
# 1. 打开文件# 相对路径, 相对于哪一个目录下面的指定文件
f = open("a.txt", "r")# 2. 读写操作
content = f.read()
print(content)f.write("88888")# 会报错,因为当前f为只读模式# # 3. 关闭文件
# f.close()
增加brbwbab以二进制格式进行操作文件读写如果文件是二进制文件, 则选择此项例如图片视频音频...
# 1. 打开xx.jpg文件, 取出内容, 获取内容的前面半部分
# 1.1 打开文件
fromFile = open("xx.jpg", "rb")# 1.2 读取文件内容
fromContent = fromFile.read()
print(fromContent)# 1.3 关闭文件
fromFile.close()# 2. 打开另外一个文件xx2.jpg, 然后, 把取出的半部分内容, 写入到xx2.jpg文件里面去
# 2.1 打开目标文件
toFile = open("xx2.jpg", "wb")# 2.2 写入操作
content = fromContent[0: len(fromContent) // 2]
toFile.write(content)# 2.3 关闭文件
toFile.close()
增加+r+1.与 r的区别2. 与 写 和 w的区别w+a+rb+rw+ra+代表都是以 "读写模式" 进行打开其他特性基本和 + 前面的模式一致但是关于部分操作, 有细节区别作业:自己做测试, 验证区别

读写

定位

f.seek(偏移量,[0,1,2])0表示开头位置【默认】1表示当前位置2表示文件末尾位置注意文本文件的操作模式下(不带b)只能写0如果想要写1、2, 必须在二进制文件操作模式下(带b)
f.tell()查看当前位置
f = open("a.txt", "r")print(f.tell())
f.seek(2)
f.seek(-22)  # 文件末尾位置,前移两个偏移量
print(f.tell())
print(f.read())
print(f.tell())f.close()

f.read(字节数)字节数默认是文件内容长度下标会自动后移f.readline([limit])读取一行数据limit限制的最大字节数f.readlines()会自动的将文件按换行符进行处理将处理好的每一行组成一个列表返回for in可以直接遍历 f 本身也可以遍历行列表
判定是否可读.readable()
注意一般文件特别大的时候, 可以使用readline方法按行加载, 可节省内存但相比于其他两个读取方法, 性能较低其他两个方法, 一次性读取文件所有内容虽然占用内存但处理性能比较高
#f.read(字节数)
#	字节数默认是文件内容长度
#	下标会自动后移ef.seek(2)
content = f.read(2)
print(f.tell())
print(content)# f.readline([limit])
# 	读取一行数据
# 	limit
# 		限制的最大字节数
print("----", f.tell())
content = f.readline()
print(content, end="")
print("----", f.tell())content = f.readline()
print(content, end="")print("----", f.tell())content = f.readline()
print(content, end="")print("----", f.tell())# f.readlines()
# 	会自动的将文件按换行符进行处理
# 	将处理好的每一行组成一个列表返回content = f.readlines()
print(content)f.close()import collections#	for in
#		可以直接遍历 f 本身
#		也可以遍历行列表
f = open("a.txt", "r")print(isinstance(f, collections.Iterator)) # 判定是否是迭代器
# 可以遍历自身
for i in f:print(i, end="")##	判定是否可读
##		.readable()
if f.readable():# 可以遍历行列表content = f.readlines()for i in content:print(i, end="")f.close()

f.write("内容")返回值是写入的字节长度
判定是否可写.writeable()
f = open("a.txt", "w")
if f.writable():print(f.write("123"))

关闭

f.close()关闭文件为什么需要关闭?打开状态, 会占用系统资源会把缓冲区内容清空到磁盘文件中
补充f.flush()清空缓冲区内容到磁盘文件中
f = open("a.txt", "w")
if f.writable():print(f.write("123"))f.flush()f.close()

文件的相关操作

模块import os
信息获取操作.closed返回true如果文件已被关闭,否则返回false.name返回文件的名称
其他操作重命名os.rename(‘old_name’, 'new_name')删除删除文件os.remove('文件名')文件不存在会报错删除目录os.rmdir(path)不能递归删除目录如果文件夹非空,会报错os.removedirs(path)可以递归的删除目录,即删除该路径上的所有文件夹如果文件夹非空会报错创建文件夹os.mkdir("文件夹名称"[,mode])不能递归创建【即不多多级创建】数字模式权限文件拥有者读r4写w2可执行x1同组用户读r4写w2可执行x1其他用户读r4写w2可执行x1获取当前目录os.getcwd()改变默认目录os.chdir("目标目录")获取目录列表os.listdir("./")
import os
# 重命名
os.rename("b.txt", "bb.txt")
os.rename("first", "one")os.rename("one/one.txt", "two/two.txt") os.renames("one/one.txt", "two/two.txt") #会一级一级向上修改文件名称# 删除
## 删除文件
os.remove("xx2.jpg")
## 删除文件夹
os.rmdir("one/one2")  # 会报错os.removedirs("one/one2")  # 可以递归的删除目录,即删除该路径上的所有文件夹# 创建文件夹
os.mkdir("a")
os.mkdir("b/c/d")  # 会报错,只能创建一级目录,不能创建多级目录# 创建文件夹并设置权限
os.mkdir("b", 0o777)
# 切换文件目录
os.chdir("a")open("dd.txt", "w")# 获取当前目录
os.getcwd()
print(os.getcwd())# 改变默认目录
os.chdir("目标目录")# 获取目录内容列表
# 列举当前a目录下的所有文件,结果是列表
print(os.listdir("a"))# 列举当前所在目录下的一级内容。文件、文件夹等,注意:不包含文件夹下的深层内容
print(os.listdir("./"))# 列举当前所在目录的上一级目录下的内容。文件、文件夹等,注意:不包含文件夹下的深层内容
print(os.listdir("../"))

案例

文件的复制

import osos.chdir("files")   # 切换目录#1. 只读模式, 打开要复制的文件
# # 	追加模式, 打开副本文件source_file = open("d.txt", "r", encoding="utf-8")
dst_file = open("d_bat.txt", "a", encoding="utf-8")# # 2. 从源文件中读取内容
# # 	写入到目标文件中
# content = source_file.read()
# dst_file.write(content)## 大文件处理
while True:content = source_file.read(1024)if len(content) == 0:breakdst_file.write(content)#3. 关闭源文件和目标文件
source_file.close()
dst_file.close()

批量重命名

文件分类,并生成文件清单

给定一批不同格式的文件;按照文件夹后缀名,划分到不同的文件夹;生成 .txt 格式的文件清单,清单标明不同的格式分别有那些文件
# 文件分类# 0, 获取所有的文件名称列表
import os
import shutilpath = "files"if not os.path.exists(path):exit()os.chdir(path)
file_list = os.listdir("./")
# print(file_list)# 1. 遍历所有的文件(名称)
for file_name in file_list:# print(file_name)# 2. 分解文件的后缀名# 2.1 获取最后一个.的索引位置 xx.oo.txtindex = file_name.rfind(".")if index == -1:continue# print(index)# 2.2 根据这个索引位置, 当做起始位置, 来截取后续的所有字符串内容extension = file_name[index + 1:]print(extension)# 3. 查看一下, 是否存在同名的目录# 4. 如果不存在这样的目录 -> 直接创建一个这样名称的目录if not os.path.exists(extension):os.mkdir(extension)shutil.move(file_name, extension)# 5, 目录存在 -> 移动过去# 生成文件清单# 通过给定的文件夹, 列举出这个文件夹当中, 所有的文件,以及文件夹, 子文件夹当中的所有文件
def listFilesToTxt(dir, file):# 1. 列举出, 当前给定的文件夹, 下的所有子文件夹, 以及子文件file_list = os.listdir(dir)# print(file_list)# 2. 针对于, 列举的列表, 进行遍历for file_name in file_list:new_fileName = dir + "/" + file_name# 判定, 是否是目录, listFilesif os.path.isdir(new_fileName):# print(new_fileName)file.write(new_fileName + "\n")listFilesToTxt(new_fileName, file)else:# 打印下, 文件名称# print("\t" + file_name)file.write("\t" + file_name + "\n")# print("")file.write("\n")f = open("list.txt", "a")
listFilesToTxt("files", f)

补充-数字模式权限

如何在Python中读取文件的权限模式?

在 Python 中,你可以使用 os 模块来读取文件的权限模式。os 模块提供了一些函数来获取文件和目录的信息,包括权限模式。

import os# 替换为你要读取权限的文件路径
file_path = "your_file_path"# 使用 os.stat() 函数获取文件的状态信息
file_stat = os.stat(file_path)# 获取权限模式
mode = file_stat.st_mode# 打印权限模式
print("权限模式:", oct(mode))
在上面的示例中,首先指定要读取权限的文件路径。然后,使用 os.stat() 函数获取文件的状态信息,并将其存储在 file_stat 变量中。file_stat 对象包含了文件的各种信息,包括权限模式。通过访问 file_stat.st_mode 属性,可以获取到文件的权限模式。最后,使用 oct() 函数将权限模式转换为八进制表示,并打印出来。请注意,权限模式的八进制表示通常以 "0o" 开头,表示这是一个八进制数。每个数字位对应着不同的权限,例如前三位表示所有者的权限,接下来三位表示组的权限,最后三位表示其他用户的权限。

通过这种方式,你可以在 Python 中读取文件的权限模式,并根据需要进行进一步的处理或分析。

数字如何表示权限

首先,我们规定 数字 4 、2 和 1表示读、写、执行权限(具体原因可见下节权限详解内容),即 r=4,w=2,x=1 。此时其他的权限组合也可以用其他的八进制数字表示出来,如:rwx = 4 + 2 + 1 = 7rw = 4 + 2 = 6rx = 4 +1 = 5即若要同时设置 rwx (可读写运行) 权限则将该权限位 设置 为 4 + 2 + 1 = 7若要同时设置 rw- (可读写不可运行)权限则将该权限位 设置 为 4 + 2 = 6若要同时设置 r-x (可读可运行不可写)权限则将该权限位 设置 为 4 +1 = 5

上面我们提到,每个文件都可以针对三个粒度,设置不同的rwx(读写执行)权限。即我们可以用三个8进制数字分别表示 拥有者 、群组 、其它组( u、 g 、o)的权限详情,并用chmod直接加三个8进制数字的方式直接改变文件权限。

Linux上通常使用chmod命令对文件的权限进行设置和更改

chmod [可选项] <mode> <file…>

参数说明:[可选项]-c, --changes          like verbose but report only when a change is made (若该档案权限确实已经更改,才显示其更改动作)-f, --silent, --quiet  suppress most error messages  (若该档案权限无法被更改也不要显示错误讯息)-v, --verbose          output a diagnostic for every file processed(显示权限变更的详细资料)--no-preserve-root  do not treat '/' specially (the default)--preserve-root    fail to operate recursively on '/'--reference=RFILE  use RFILE's mode instead of MODE values-R, --recursive        change files and directories recursively (以递归的方式对目前目录下的所有档案与子目录进行相同的权限变更)--help		显示此帮助信息--version		显示版本信息
[mode] 权限设定字串,详细格式如下 :[ugoa...][[+-=][rwxX]...][,...],其中[ugoa...]u 表示该档案的拥有者,g 表示与该档案的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示所有(包含上面三者)。[+-=]+ 表示增加权限,- 表示取消权限,= 表示唯一设定权限。[rwxX]r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该档案是个子目录或者该档案已经被设定过为可执行。[file...]文件列表(单个或者多个文件、文件夹)

示例

1、设置所有用户可读取文件 a.conf

chmod ugo+r a.conf 或
chmod a+r  a.conf

2、设置 c.sh 只有 拥有者可以读写及执行

chmod u+rwx c.sh

3、设置文件 a.conf 与 b.xml 权限为拥有者与其所属同一个群组 可读写,其它组可读不可写

chmod a+r,ug+w,o-w a.conf b.xml

4、设置当前目录下的所有档案与子目录皆设为任何人可读写

chmod -R a+rw *

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/475877.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

宏景HCM uploadLogo.do接口存在任意文件上传漏洞

文章目录 免责声明漏洞描述搜索语法漏洞复现nuclei修复建议 免责声明 本文章仅供学习与交流&#xff0c;请勿用于非法用途&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任 漏洞描述 宏景HCM是一款基于先进的人力资本管理体系和灵活开放的技术架构的企…

Linux:confluence8.5.9的部署(下载+安装+pojie)离线部署全流程 遇到的问题

原文地址Linux&#xff1a;confluence8.5.9的部署&#xff08;下载安装破ji&#xff09;离线部署全流程_atlassian-agent-v1.3.1.zip-CSDN博客 背景&#xff1a;个人使用2核4g 内存扛不住 总是卡住&#xff0c;但是流程通了所以 直接公司开服务器干生产 个人是centos7 公司…

基于web的音乐网站(Java+SpringBoot+Mysql)

目录 1系统概述 1.1 研究背景 1.2研究目的 1.3系统设计思想 2相关技术 2.1 MYSQL数据库 2.2 B/S结构 2.3 Spring Boot框架简介 3系统分析 3.1可行性分析 3.1.1技术可行性 3.1.2经济可行性 3.1.3操作可行性 3.2系统性能分析 3.2.1 系统安全性 3.2.2 数据完整性 …

MATLAB绘图基础11:3D图形绘制

参考书&#xff1a;《 M A T L A B {\rm MATLAB} MATLAB与学术图表绘制》(关东升)。 11.3D图形绘制 11.1 3D图概述 M A T L A B {\rm MATLAB} MATLAB的 3 D {\rm 3D} 3D图主要有&#xff1a; 3 D {\rm 3D} 3D散点图、 3 D {\rm 3D} 3D线图、 3 D {\rm 3D} 3D曲面图、 3 D {\rm…

集合卡尔曼滤波(Ensemble Kalman Filter),用于二维滤波(模拟平面上的目标跟踪),MATLAB代码

集合卡尔曼滤波&#xff08;Ensemble Kalman Filter&#xff09; 文章目录 引言理论基础卡尔曼滤波集合卡尔曼滤波初始化预测步骤更新步骤卡尔曼增益更新集合 MATLAB 实现运行结果3. 应用领域结论 引言 集合卡尔曼滤波&#xff08;Ensemble Kalman Filter, EnKF&#xff09;是…

Bug:gomonkey系列问题(undefined: buildJmpDirective)

Bug&#xff1a;gomonkey系列问题(undefined: buildJmpDirective) 最近拉代码发现其他同事写单测使用的是gomonkey&#xff0c;我本地mac m3芯片执行报错&#xff0c;gomonkey: undefined: buildJmpDirective。 对go convey不熟悉的朋友可以看这篇文章&#xff1a; Go Convey测…

Arcgis 地图制作

地图如下,不同历史时期&#xff1a;

【AI编程实战】安装Cursor并3分钟实现Chrome插件(保姆级)

Cursor介绍 https://www.cursor.com/ 一句话介绍&#xff1a;AI代码编辑器&#xff0c;当前最火的AI编程器 软件下载与安装 下载 打开Cursor官网下载&#xff0c;会根据操作系统的差别进行选择 https://www.cursor.com/ 这里下载的内容很小&#xff0c;是个安装器&#x…

C指针之舞——指针探秘之旅(2)

❤博客主页&#xff1a;折枝寄北-CSDN博客 ❤专栏&#xff1a;C语言学习专栏 在上一篇博客文章&#xff1a;C指针之舞——指针探秘之旅-CSDN博客中&#xff0c;我们学习了字符指针&#xff0c;指针数组&#xff0c;数组指针&#xff0c;数组传参和指针传参等内容&#xff0c;…

大数据新视界 -- Impala 性能优化:量子计算启发下的数据加密与性能平衡(下)(30 / 30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

RPC框架负载均衡

什么是负载均衡&#xff1f; 当一个服务节点无法支撑现有的访问量时&#xff0c;会部署多个节点&#xff0c;组成一个集群&#xff0c;然后通过负载均衡&#xff0c;将请求分发给这个集群下的每个服务节点&#xff0c;从而达到多个服务节点共同分担请求压力的目的。 负载均衡主…

JMeter监听器与压测监控之 InfluxDB

1. 简介 在本文中&#xff0c;我们将介绍如何在 Kali Linux 上通过 Docker 安装 InfluxDB&#xff0c;并使用 JMeter 对其进行性能监控。InfluxDB 是一个高性能的时序数据库&#xff0c;而 JMeter 是一个开源的性能测试工具&#xff0c;可以用于对各种服务进行负载测试和性能监…

Banana Pi BPI-CanMV-K230D-Zero 采用嘉楠科技 K230D RISC-V芯片设计

概述 Banana Pi BPI-CanMV-K230D-Zero 采用嘉楠科技 K230D RISC-V芯片设计,探索 RISC-V Vector1.0 的前沿技术&#xff0c;选择嘉楠科技的 Canmv K230D Zero 开发板。这款创新的开发板是由嘉楠科技与香蕉派开源社区联合设计研发&#xff0c;搭载了先进的勘智 K230D 芯片。 K230…

如何判断注入点传参类型--理论

注入点传参类型 在我们找到注入点后&#xff0c;首先要判断传参的类型&#xff0c;才能以正确的形式向数据库查询数据。 注入点传参一般分为数字型和字符型。 数字型&#xff1a;当传入的参数为整形时&#xff0c;存在SQL注入漏洞&#xff0c;就可以认为是数字型注入。 字符…

HarmonyOS(57) UI性能优化

性能优化是APP开发绕不过的话题&#xff0c;那么在HarmonyOS开发过程中怎么进行性能优化呢&#xff1f;今天就来总结下相关知识点。 UI性能优化 1、避免在组件的生命周期内执行高耗时操作2、合理使用ResourceManager3、优先使用Builder方法代替自定义组件4、参考资料 1、避免在…

AI Prompt Engineering

AI Prompt Engineering 简介 Prompt Engineering, 提示工程&#xff0c;是人工智能领域的一项技术&#xff0c;它旨在通过设计高效的提示词&#xff08;prompts&#xff09;来优化生成式 AI&#xff08;如 GPT、DALLE 等&#xff09;的输出。提示词是用户与生成式 AI 交互的核…

NVR接入录像回放平台EasyCVR视频融合平台加油站监控应用场景与实际功能

在现代社会中&#xff0c;加油站作为重要的能源供应点&#xff0c;面临着安全监管与风险管理的双重挑战。为应对这些问题&#xff0c;安防监控平台EasyCVR推出了一套全面的加油站监控方案。该方案结合了智能分析网关V4的先进识别技术和EasyCVR视频监控平台的强大监控功能&#…

大语言模型中ReLU函数的计算过程及其函数介绍

文章目录 概要ReLU定义 概要 **ReLU 作用&#xff1a;**主要用于为神经网络引入非线性能力&#xff0c;作用是将输入中的整数保留原值&#xff0c;负数置为 0。 从而在层与层之间引入非线性&#xff0c;使神经网络能够拟合复杂的非线性关系。 **ReLU使用场景&#xff1a;**Lla…

【图像检测】深度学习与传统算法的区别(识别逻辑、学习能力、泛化能力)

识别逻辑 深度学习 使用了端到端的学习策略&#xff0c;直接学习从图像到检测结果的映射关系&#xff0c;自动提取特征&#xff0c;并且根据特征与特征之间的关系&#xff0c;计算出检测结果。 传统算法 则是人工提取特征&#xff0c;比如边缘特征&#xff0c;直线特征&#x…

C++-第25课-哈希表性能的分析

目录 一、哈希表概述 1. 什么是哈希表​编辑 2. 哈希表的优点 3. 哈希表的缺点 二、哈希函数 常见哈希函数 三. 哈希冲突的原因和解决方法 一.哈希冲突的原因 二、哈希冲突的解决方法 1. 链表法&#xff08;Separate Chaining&#xff09; 2. 开放寻址法&#xff08;…