python 第十一章 文件操作

news2024/11/10 17:02:34

系列文章目录

第一章 初识python
第二章 变量
第三章 基础语句
第四章 字符串str
第五章 列表list []
第六章 元组tuple ( )
第七章 字典dict {}
第八章 集合set {}
第九章 常用操作
第十章 函数


文章目录

  • 系列文章目录
  • 11.1文件操作的作用
  • 11.2文件的基本操作
    • 打开
      • 打开文件模式
    • 文件对象方法
      • 关闭
  • 11.3文件备份
  • 11.4文件和文件夹的操作
    • 文件重命名
    • 删除文件
    • 创建文件夹
    • 删除文件夹
    • 获取当前目录的所在路径
    • 改变当前工作目录到指定的路径
    • 获取目录列表
    • 案例
      • 批量修改


11.1文件操作的作用

思考: 文件操作包含什么?
答:打开、关闭、读、写、复制…

思考:文件操作的的作用是什么?
答:读取内容、写入内容、备份内容…

总结: 文件操作的作用就是把一些内容(数据)存储存放起来,可以让程序下一次执行的时候直接使用,而不必重新制作一份,省时省力。

11.2文件的基本操作

文件操作步骤:

  1. 打开文件
  2. 读写等操作
  3. 关闭文件

注意:可以只打开和关闭文件,不进行如何读写操作。

打开

在python,使用open函数,可以打开一个已经存在的文件,或者创建一个新文件,语法如下:
open(name ,mode )

name: 是要打开的目标文件名的字符串(可以包含文件所在的具体路径)。
mode:设置打开文件的模式(访问模式): 只读、写入、追加等。如果省略表示访问模式为r

# 1. 打开 open()
f = open("test.txt", "w")

# 2. 读写操作 write() read()
f.write("I wander in your yard, looking forward to meeting you.")

# 3. 关闭 close()
f.close()

在这里插入图片描述

打开文件模式

主访问模式

  • r
  • w
  • a
模式描述
r以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。文件不存在就报错
rb以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式
r+打开一个文件用于读写。文件指针将会放在文件的开头。
rb+以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
w打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除,会覆盖原有内容。如果该文件不存在,创建新文件。
wb以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
w+打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb+以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
a打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾,不会覆盖原有内容。也就是说新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写
ab+以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

带b的都是二进制,带+号的都是可读可写模式。

那么r+和w+有什么区别呢?

rb、r+、rb+都是基于r模式,相当于扩展开来,所有的访问模式它的基础特点都要遵循主访问模式,r是只读方式打开,如果文件不存在就报错,那么也就意味着如果rb、r+、rb+去打开一个文件,只要文件不存在,但凡带r的都报错;如果是带w模式的不管wb、w+、wb+如果打开文件,文件不存在则新建文件。这就是r+和w+的区别了。

f = open("test.txt", "r")
# f = open("test1.txt", "r")# 报错:文件不存在
# f.write("hello world")# 报错:不支持写入
f.close()

注意:此时的f是open函数的文件对象

f = open("test1.txt", "w")# 文件不存在就新建了一个文件
f.write("hello world")
f.close()


f = open("2.txt", "a")  # 文件不存在就新建了一个文件
f.write("xhxy")
f.close()

注意如果是r+模式下写入会覆盖数据,换行 “\n”会有字节占位

f = open("test.txt", "r+")

f.write("666666")

f.close()

在这里插入图片描述
在这里插入图片描述

文件对象方法

对象.write(‘内容’)

注意
1.w和a模式:如果文件不存在则创建该文件; 如果文件存在,w模式先清空再写入,a 模式直接末尾追加。
2.r模式:如果文件不存在则报错.

对象.read(num)

num表示要从文件中读取的数据的长度 (单位是字节),如果没有传入num,那么就表示读取文件中所有的数据。

f = open("test.txt", "r")

# read不写参数表示读取所有;
# print(f.read())  # 结果: xhxy

print(f.read(10))
""" 结果:
xhxy
aaaaa
"""


f.close()

文件内容如果换行,底层有\n会有字节占位,导致read书写参数读取出来的 和 眼睛看到的个数和参数值不匹配。

在这里插入图片描述
在这里插入图片描述

对象.readlines()
readlines可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素。

f = open("test.txt", "r")

print(f.readlines())  # ['xhxy\n', 'aaaaa\n', 'yyyy']

f.close()

对象.readline()

readline()一次读取一行内容

f = open("test.txt", "r")

print(f"第一行: {f.readline()}")
print(f"第二行: {f.readline()}")

f.close()

在这里插入图片描述
文件对象.seek(偏移量, 起始位置)
作用: 用来移动文件指针。

偏移量:非负数,单位字符
起始位置:默认值为 0

  • 0: 文件开头
  • 1: 当前位置
  • 2: 文件结尾
f = open("test.txt", "r")

f.seek(2, 0)
print(f.read())

f.close()

在这里插入图片描述
文件对象.tell()

作用: 返回一个整数,表示当前文件指针的位置(到文件开头的比特数)。
在这里插入图片描述

关闭

文件对象.close()

11.3文件备份

需求:用户输入当前目录下任意文件名,程序完成对该文件的备份功能(备份文件名为XX[备份]后缀,例如: test[备份].txt)。

步骤:
1.接收用户输入的文件名
2.规划备份文件名
3.备份文件写入数据

代码:

# 1. 用户输入目标文件 test.txt.mp4
old_file_name = input("请输入您要备份的文件名:")
print(old_file_name)
# 2. 规划备份文件名
index = old_file_name.rfind(".")
new_file_name = old_file_name[:index] + "[备份]" + old_file_name[index:]
print(new_file_name)
# 3. 备份文件写入数据(数据和原文件一样)
old_file = open(old_file_name, "rb")
new_file = open(new_file_name, "wb")

while True:
    con = old_file.read(1024)
    if len(con) == 0:
        # 读取完成
        break
    new_file.write(con)


old_file.close()
new_file.close()

在这里插入图片描述
如果用户输入 .txt ,这是一个无效文件,程序如何更改才能限制只有有效的文件名才能备份?
答:添加条件判断即可。

if index > 0:
    postfix = old_file_name[index:]

# new_file_name = old_file_name[:index] + "[备份]" + old_file_name[index:]
new_file_name = old_file_name[:index] + "[备份]" + postfix

在这里插入图片描述

11.4文件和文件夹的操作

在Python中文件和文件夹的操作要借助os模块里面的相关功能,具体步骤如下:
1.导入os模块
import os
2.使用os 模块相关功能
os.函数名()

文件重命名

os.rename(目标文件名 可以带路径,新文件名)

如果没有这个文件就会报错(系统找不到指定文件)

import os

os.rename("test.txt", "123.txt")

删除文件

os.remove(目标文件名 可以带路径)
如果没有这个文件就会报错(系统找不到指定文件)

import os

os.remove("2.txt")

创建文件夹

os.mkdir(文件夹名字 可以带路径)

如果已经存在文件夹那么会报错

import os

os.mkdir("abcd")

os.rmdir("abcd")

删除文件夹

os.rmdir(文件夹名字 可以带路径)

获取当前目录的所在路径

os .getcwd()

在这里插入图片描述

改变当前工作目录到指定的路径

os.chdir(目录)

在这里插入图片描述

获取目录列表

os.listdir(目录)
获取文件夹下所有文件和文件夹,返回一个列表

在这里插入图片描述
在这里插入图片描述

案例

需求: 批量修改文件名,既可添加指定字符串,又能删除指定字符串。

步骤:
1.设置添加删除字符串的的标识
2.获取指定目录的所有文件
3.将原有文件名添加/删除指定字符串,构造新名字
4.os.rename()重命名

批量修改

需求1: 把code文件夹所有文件重命名 py_xxxx

代码:

import os

f_list = os.listdir()
for i in f_list:
    new_name = "py_" + i
    os.rename(i, new_name)

在这里插入图片描述

需求2: 删除py_重命名

import os

# 构造条件的数据,1 添加py_ ; 2 删除py_
flag = 2

f_list = os.listdir()

for i in f_list:
    if flag == 1:
        new_name = "py_" + i
    elif flag == 2:
        num = len('py_')
        new_name = i[num:]

    os.rename(i, new_name)

在这里插入图片描述
flag=1就是批量添加前缀,=2批量删除前缀
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

string底层是如何实现的

前言 在我们学习的时候总是会用到string,知道它具备各种功能,它也是一种很强大的模板,那么有没有想过,我们天天都在使用的它,它的底层又是怎么样的,它又是如何实现的呢。这里讲挑选几个比较常用的一个功能…

SGD原理及Pytorch实现

🎏目录 🎈1 SGD       🎄1.1 原理       🎄1.2 构造       🎄1.3 参数详解——momentum ✨1 SGD 🥚2.1 原理 SGD为随机梯度下降,原理可看刘建平老师博客。 🎃…

Blender--原理化体积

“原理化体积 着色器将所有体积着色组件组合到一个易于使用的节点中。该节点含有散射,吸收和黑体辐射属性,因此,可以仅仅使用该着色器节点对烟雾和火焰等进行渲染。” 官方文档介绍:原理化体积 — Blender Manual 可以用于实现丁…

Rainbond开源

Rainbond的 Gateway API 插件制作实践 Gateway API 作为新一代的流量管理标准,对原有 Ingress 的扩展不规范、移植性差等问题做出了改进。从兼容K8s生态和优化网关体验出发,Rainbond 支持以插件的形式扩展平台网关能力,目前已经有多家社区提供…

启动项目报错,如何分析pom

报错信息如下 Caused by: java.lang.NoClassDefFoundError: org/springframework/core/metrics/ApplicationStartup 报错说找不到ApplicationStartup这个类&#xff0c;到项目中查看pom的dependency 我的项目引入了两个依赖 <parent><groupId>org.springframewor…

vue使用富文本编辑器 Wangeditor 可显示编辑新增回显禁用

1.效果图 2.安装依赖 npm install wangeditor 3.在main.js 全局引入 富文本组件 import editorBar from "/components/editor/editor.vue";Vue.component(editorBar, editorBar) 全局引入页面使用 <editor-bar v-model"form.nr" :flag"false&quo…

【高并发网络通信架构】1.Linux下实现单客户连接的tcp服务端

目录 一&#xff0c;函数清单 1.socket 方法 2.bind 方法 3.listen 方法 4.accept 方法&#xff08;阻塞函数&#xff09; 5.recv 方法&#xff08;阻塞函数&#xff09; 6.send 方法 7.close 方法 8.htonl 方法 9.htons 方法 10.fcntl 方法 二&#xff0c;代码实现…

0126 线性表

目录 2.线性表 2.1线性表的定义和基本概念 2.1部分习题 2.2线性表的顺序表示 2.2部分习题 2.3线性表的链式表示 2.3部分习题 2.线性表 2.1线性表的定义和基本概念 2.1部分习题 1.线性表是具有n个&#xff08;&#xff09;的有限序列 A.数据表 B.字符 C.…

FPGA纯verilog实现UDP协议栈,sgmii接口SFP光口收发,提供工程源码和技术支持

目录 1、前言2、我这里已有的UDP方案3、该UDP协议栈性能4、详细设计方案SFPGMII AXIS接口模块AXIS FIFOUDP协议栈1G/2.5G Ethernet PCS/PMA or SGMII 5、vivado工程1-->B50610 工程6、上板调试验证并演示准备工作查看ARPUDP数据回环测试 7、福利&#xff1a;工程代码的获取 …

c++日程管理系统

一.需求分析 多功能日历&#xff08;要求有简单ui&#xff09; 要求&#xff1a; 1.使用c代码用visual stdio运行 2.用户登录注册 3.登录后给用户三大功能选择&#xff1a; &#xff08;1&#xff09;基本日历&#xff1a;显示日历,默认六月&#xff0c;每日有对应的日程 &…

开源防病毒引擎ClamAV

本文软件是应网友 Windows 的要求折腾的&#xff1b; 什么是 ClamAV &#xff1f; ClamAV 是一个开源 ( GPLv2 ) 反病毒工具包&#xff0c;专为邮件网关上的电子邮件扫描而设计。它提供了许多实用程序&#xff0c;包括灵活且可扩展的多线程守护程序、命令行扫描程序和用于自动数…

尚硅谷Docker实战教程-笔记09【高级篇,DockerFile解析】

尚硅谷大数据技术-教程-学习路线-笔记汇总表【课程资料下载】视频地址&#xff1a;尚硅谷Docker实战教程&#xff08;docker教程天花板&#xff09;_哔哩哔哩_bilibili 尚硅谷Docker实战教程-笔记01【基础篇&#xff0c;Docker理念简介、官网介绍、平台入门图解、平台架构图解】…

LSTM介绍

LSTM ft表示 遗忘门。LSTM对于每一次的输入,首先决定遗忘掉之前的哪些记忆。将ft和t-1时刻的细胞状态相乘,得出将遗忘哪些记忆。 记忆门 是用来控制是否将t时刻的数据并入细胞状态。tanh函数可以将此刻向量中的有效信息提取出来,为gt。sigmoid函数用于控制此刻多少记忆进入…

阿里云ACE认证和华为云HCIE认证对比分析

最近有不少小伙伴私信问我&#xff0c;阿里云、腾讯云、华为云这几大厂商的云认证&#xff0c;哪一个更好&#xff0c;今天有空来跟大家认真地分析一下。 01-从云计算市场占有率来看 作为国内云计算市场的探路人&#xff0c;阿里虽然一路走来有过很多坎坷&#xff0c;但也不负…

Linux系统优化策略

Linux系统优化策略 1.禁用不需要的服务 在Linux系统中禁用不需要的服务可以通过以下步骤进行&#xff1a; 使用以下命令查看当前正在运行的服务&#xff1a; systemctl list-unit-files --typeservice根据需要禁用特定的服务&#xff0c;使用以下命令&#xff1a; systemctl …

【LeetCode周赛】2022上半年题目精选集——双指针

文章目录 2271. 毯子覆盖的最多白色砖块数思路代码 2302. 统计得分小于 K 的子数组数目代码1——前缀和滑动窗口代码2——双指针 O ( 1 ) O(1) O(1)空间 &#xff08;代码1的优化&#xff09; https://leetcode.cn/circle/discuss/G0n5iY/ 2271. 毯子覆盖的最多白色砖块数 22…

Win10安全中心怎么关闭?Win10安全中心关闭方法

Win10安全中心怎么关闭&#xff1f;关闭Win10的安全中心可以帮助用户自定义系统的安全和防护设置&#xff0c;但有些用户不知道怎么操作才能关闭安全中心&#xff0c;首先用户需要打开Win10电脑的设置选项&#xff0c;接着打开安全中心&#xff0c;然后关掉安全中心的实时保护、…

STM32CubeMX使用示例---生成LED闪烁工程

这里记录一下通过STM32CubeMX配置STM32G030C8T6&#xff0c;生成LED闪烁的示例工程的过程&#xff0c;用来学习使用STM32CubeMX&#xff1b; 以STM32G030C8T6 PB4 脚做LED 输出闪烁为例&#xff0c;外部8MHZ 晶振,系统主频64MHZ,LED 灯1 秒钟闪烁一次做一个示例程序。 文章目录…

Go语言程序设计(八)数据输入输出

Go语言提供了多种用于实现数据输入、输出的函数,这些函数在fmt包中实现。在输入、输出数据时,首先要导入fmt包,导入语句为: import "fmt" 一、标准输出函数 数据输出(Data Output),是计算机对各类输入数据进行加工处理后,将结果以用户所要求的形式输出到标准输出设…

OpenCV使用`clone()`函数来进行深度拷贝,拷贝后的`image_clone`修改不会影响原始图像`image`

这是完整的代码: #include <opencv2/opencv.hpp>int main() {// 创建一个白色的图像cv::Mat image(500, 500, CV_8UC3, cv