掌握Python文件操作的绝招:打造数据之径,揭开文件操作的神秘面纱

news2024/11/16 17:37:09

在这里插入图片描述

文章目录

  • 前言
  • 文件的基本操作
    • 打开文件操作
    • 关闭文件操作
    • 对文件进行操作
      • 1)只读文件操作
        • read()
        • readlines()
        • readline()
        • seek()
      • 2)只写文件操作
      • 3)文件追加操作
      • 读写、追加读写操作
        • 1. r+ 模式打开文件
        • 2. w+ 模式打开文件
        • 3. a+ 模式打开文件
      • 以二进制的形式打开文件并操作
  • 备份文件操作
    • 提示用户输入文件名,并生成一个有效的备份文件名
    • 将原文件中的数据拷贝到新文件中
  • 文件和文件夹操作
    • 1.文件重命名
    • 2.删除文件
    • 3.创建文件夹
    • 4.删除文件夹
    • 5.获取当前目录
    • 6.改变默认目录
    • 7.获取目录列表

前言

我们应该都知道,我们日常使用的电脑和手机其实很多的操作对象都是文件,我们的键盘和屏幕也可以类似看成是文件,文件在我们的日常生活中起着非常大的作用,因为文件可以持久的存储数据。而作为学习 python 的我们来说,文件操作的学习也是必不可少的,那么今天我将为您提供实用的知识和技巧,让您能够轻松应对各种文件操作任务。让我们一同探索Python文件操作的魅力,开拓数据处理的新境界吧!🚗🚗
在这里插入图片描述

文件的基本操作

打开文件操作

open(name,mode)
  • name:指要打开的目标文件名的字符串(也可以是文件的具体路径)
  • mode:设置打开文件的模式(访问模式)

在这里插入图片描述
我们可以使用一个变量来接收 open 返回的文件对象,为后面的操作做准备。

这里打开文件操作没多少需要注意的,唯一需要注意的就是,当我们以读的形式打开文件的时候,此文件必须存在,否则就会报错。

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

在这里插入图片描述

在这里插入图片描述

这里我们提前创建一个 test.txt 文件。

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

在这里插入图片描述

关闭文件操作

当我们打开文件的时候,到最后要记住关闭这个文件,否则会一直占用着我们的资源。
文件对象.close() 关闭文件操作

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

f.close()

在这里插入图片描述

对文件进行操作

1)只读文件操作

进行读文件操作的时候,我们需要以 读 的形式打开文件。
在这里插入图片描述
我们先在 test.txt 文件中准备点数据,然后我们进行读文件操作。

read()

read(num) 当不传入num的时候,表示读取文件中的所有数据,如果传入num参数,表示读取num个字节的数据。

# 打开文件
f = open('test.txt','r')

# 进行文件操作
print(f.read())

# 关闭文件
f.close()

在这里插入图片描述

带有num参数

# 打开文件
f = open('test.txt','r')

# 操作文件
print(f.read(7))

# 关闭文件
f.close()

在这里插入图片描述
记住换行符也算一个字节

readlines()

readlines() 函数读取文件中的每一行,以列表的形式返回数据,每一行的数据是列表的每一个元素。

# 打开文件
f = open('test.txt','r')

# 进行文件操作
print(f.readlines())

# 关闭文件
f.close()

在这里插入图片描述
这里为什么会出现 \n ,因为我们在向文件中输入信息的时候敲了回车键,回车键 \n 也被认为是一个字符。

readline()

readline() 函数每一次就只读取文件的一行,再次调用readline() 函数的时候,会继续从下一行开始读取。

# 打开文件
f = open('test.txt','r')

# 进行文件操作
print(f.readline())
print(f.readline())

# 关闭文件
f.close()

在这里插入图片描述

seek()

seek() 函数用来移动文件指针。
文件对象.seek(偏移量,起始位置)

偏移量单位为字节

当起始位置:

  • 为0时,表示文件开头
  • 为1时,表示文件当前位置
  • 为2时,表示文件的末尾
# 打开文件
f = open('test.txt','r')

# 进行文件操作
f.seek(2,0)  # 从与文件开头处偏移量为两个字节的位置开始
print(f.readline())
print(f.readline())

# 关闭文件
f.close()

在这里插入图片描述

2)只写文件操作

当进行写文件操作的时候,需要以 写 的模式打开文件。

# 打开文件
f = open('test.txt','w')

在这里插入图片描述

当我们运行完这段代码的时候,我们发现 test.txt 文件里面的内容消失了。

在这里插入图片描述
这是因为,当我们以 写 的模式打开文件的时候,文件指针会回到文件开头处,并且写入会覆盖原有内容。

不仅如此,当我们以 写 的模式打开文件的时候,如果文件不存在,会自动创建该文件。

我们先将之前创建的 test.txt 文件给删除了,然后以 写 的形式打开 test.txt 文件。

在这里插入图片描述

# 打开文件
f = open('test.txt','w')

当我们运行这段代码的时候,我们会发现自动创建了 test.txt 文件。

在这里插入图片描述

向文件中写入数据
文件对象.write()

# 打开文件
f = open('test.txt','w')

# 写入数据
f.write('abcdef')

# 关闭文件
f.close()

在这里插入图片描述
后面的操作,原文件中默认数据为abcdef。

3)文件追加操作

使用文件追加操作的时候需要以 文件追加 的模式的打开文件,并且如果该文件不存在,也会自动创建一个文件。

# 打开文件
f = open('test.txt','a+')

# 操作文件
f.write('12345')

# 关闭文件
f.close()

在这里插入图片描述

读写、追加读写操作

当我们以 w+、r+ 的模式打开文件的时候,可以对文件进行读和写的操作,但是我们需要注意文件指针的位置。

1. r+ 模式打开文件

# 打开文件
f = open('test.txt','r+')

# 操作文件
print(f.read())
f.write('@@@@@')

# 关闭文件
f.close()

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

这里当我们写入数据的时候,为什么没有覆盖原数据呢?我们要注意文件指针的位置,当我们进行完读操作后,文件指针位于文件的末尾,然后写操作是从文件指针所在的位置开始写入的。

python 使用 r+ 模式打开文件具有以下特性:

  1. 读取和写入:r+模式可以同时进行读取和写入操作。它允许您在读取文件内容的同时,通过write()方法写入新的内容到文件中。这种模式非常适用于需要读取和修改文件内容的情况。

  2. 文件指针位置:在使用r+模式打开文件后,文件指针的初始位置将位于文件的开头。您可以使用seek()方法将文件指针移动到您需要读取或写入的位置。请注意,在进行写入操作时,新的内容将从文件指针的位置开始写入,可能会覆盖原有内容。

  3. 文件截断:r+模式不会自动截断文件。如果您在写入操作时,新的内容比原有内容更短,那么一部分原有内容可能仍然保留在文件中。因此,如果您希望完全覆盖文件并只保留新的内容,可以使用truncate()方法来截断文件,或者在打开文件时选择w模式。

  4. 文件不存在:如果使用r+模式打开的文件不存在,将会引发FileNotFoundError异常。因此,在使用r+模式打开文件之前,请确保文件已经存在或您有相应的错误处理机制。

这里我们针对第三种特性举一个例子:

test.txt 文件中含有数据abcdef。

# 打开文件
f = open('test.txt','r+')

# 操作文件
f.write('@@@@@')  
print(f.read())

# 关闭文件
f.close()

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

当我们进行写入操作的时候,文件指针在文件开始处,写入数据从文件指针所在的位置开始写入,所以就会覆盖掉原有的五个长度的内容,文件指针也会随之移动,当进行读操作的时候也会从文件指针所在的位置开始读取。简单来说就是我们需要随时注意文件指针所在的位置。读写和追加操作都是从文件指针所在的位置开始的。

2. w+ 模式打开文件

test.txt 文件含有abcdef数据。

# 打开文件
f = open('test.txt','w+')

# 操作文件
print(f.read())
f.write('@@@@@')

# 关闭文件
f.close()

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

当我们使用 w+ 模式打开文件的时候,如果文件不存在,则创建文件,如果文件存在,则会先清空文件中原有的数据。

3. a+ 模式打开文件

当以 a+ 模式打开文件时,文件指针默认会在文件的末尾,所以我们直接打印数据的时候,什么都打印不出来,这需要我们配合着seek() 函数来使用。

# 打开文件
f = open('test.txt','a+')

# 操作文件
print(f.read())
f.write('@@@@@')

# 关闭文件
f.close()

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

将文件指针设置到文件开头

# 打开文件
f = open('test.txt','a+')

# 操作文件
f.seek(0)
print(f.read())
f.write('@@@@@')

# 关闭文件
f.close()

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

以二进制的形式打开文件并操作

以 rb、wb、ab、rb+、wb+、ab+的形式打开文件并操作,都是以二进制的形式展现和操作的,其他操作都是一样的。

以二进制的形式读

# 打开文件
f = open('test.txt','rb')

# 文件操作
print(f.read())

# 关闭文件
f.close()

在这里插入图片描述
以二进制的形式写
我们再写入的时候需要使用 b' ' 来表示写入的是二进制。

# 打开文件
f = open('test.txt','wb')

# 文件操作
f.write(b'zhangsan')

# 关闭文件
f.close()

在这里插入图片描述
这里虽然我们看到的还是一样的,但其实它是以二进制的形式表现的。

备份文件操作

在生活中,我们也会经常遇到文件备份的操作,那么我将为大家来揭晓文件备份操作的原理。

通常系统会提示你输入要备份的文件的名称,然后会生成一个 原文件名[备份].后缀 的文件。

提示用户输入文件名,并生成一个有效的备份文件名

因为文件的后缀是由最后一个出现的 . 的以及 . 后面的字符串所组成的,所以我们需要找到最后一个出现的 . 的位置,并且根据 . 的位置是否为 0 来判断文件名的合法性。.txt 这种文件名就是不合法的。

old_name = input('请输入你要备份的文件的名称:')

index = old_name.rfind('.')  # 从后往前找,找到的第一个.的位置就是最后一个.的位置
if index > 0:  # 判断文件名的合法性
    postfix = old_name[index:]
    
new_name = old_name[:index] + '[备份]' + postfix  # 组合成新的备份文件名

将原文件中的数据拷贝到新文件中

因为原文件中数据可能较多,一次拷贝可能会出现问题,所以我们分多次拷贝,一次拷贝部分数据。

# 打开原文件,并创建备份文件
old_f = open(old_name,'r')
new_f = open(new_name,'w')

while True:
    con = old_f.read(1024)
    if len(con) == 0:  # 当读取的内容长度为0时,表明原文件内容已读取完
        break
    new_f.write(con)

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

文件和文件夹操作

在 python 中,文件和文件夹操作需要借助模块 os 里面的相关功能,所以我们需要导入 os 模块 import os

1.文件重命名

os.rename(原文件名,新文件名)
import os
os.rename('test.txt','test1.txt')

在这里插入图片描述

2.删除文件

os.remove(文件名)
os.remove('test1.txt')

在这里插入图片描述

3.创建文件夹

os.mkdir(文件夹名)
os.mkdir('aa')

在这里插入图片描述

4.删除文件夹

os.rmdir(文件夹)
os.rmdir('aa')

在这里插入图片描述

5.获取当前目录

os.getcwd()
print(os.getcwd())

在这里插入图片描述

6.改变默认目录

os.chdir(目录)

如果我们想要在文件夹 aa 下面再创建一个文件夹 bb 该怎么办呢?

os.mkdir('aa')
os.mkdir('bb')

这样可以吗?
在这里插入图片描述
显然不行,aa和bb属于同一级目录,这是因为默认目录是这个:
在这里插入图片描述
添加文件夹也是在这个默认目录下添加的,那么如果我们想要在aa文件夹下创建bb文件夹,就需要我们更改默认目录。

os.mkdir('aa')
os.chdir('aa')  # 更改默认目录为aa
os.mkdir('bb')

在这里插入图片描述

7.获取目录列表

os.listdir(目录)

os.listdir(目录) 会以列表的形式返回该目录下的所有文件。

print(os.listdir('aa'))

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

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

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

相关文章

走向 Native 化:SpringDubbo AOT 技术示例与原理讲解

作者:刘军 Java 应用在云计算时代面临“冷启动”慢、内存占用高、预热时间长等问题,无法很好的适应 Serverless 等云上部署模式,GraalVM 通过静态编译、打包等技术在很大程度上解决了这些问题,同时针对 GraalVM 的一些使用限制&a…

用了国产接口管理神器 Apifox 之后,我果断从 Postman “脱坑”了

在当前行业发展背景下,绝大部分项目都是基于前后端分离的架构进行的,由前后端、测试、运维等不同的团队共同开发,那么团队之间能否很好的 协同合作 无疑直接决定着项目的最终效果。 但是在实际开发流程中,团队之间的协同是很低效…

网络编程5——TCP协议的五大效率机制:滑动窗口+流量控制+拥塞控制+延时应答+捎带应答

文章目录 前言一、TCP协议段与机制TCP协议的特点TCP报头结构TCP协议的机制与特性 二、TCP协议的 滑动窗口机制 三、TCP协议的 流量控制机制 四、TCP协议的 拥塞控制机制 五、TCP协议的 延时应答机制 六、TCP协议的 捎带应答机制 总结 前言 本人是一个普通程序猿!分享一点自己的…

c语言进阶-printf的用法拓展

Printf函数打印方法拓展: 字符串赋值给指针,相当于把h的地址赋值给p了。 printf函数直接放字符串也是把首地址给printf,然后printf从首地址打印到\0。 打印时可以直接传p地址

IDEA使用教程

1. 查看代码历史版本 若要查看特定 Java 类的代码历史版本,请执行以下操作: 鼠标右键点击所需查看的 Java 类。 在弹出菜单中选择 "Local History"(本地历史) >> "Show History"(显示历史…

云尚办公项目-搭建环境

硅谷项目,由尚硅谷分享,具体项目视频可以根据B站尚硅谷进行学习。搭建项目可以直接根据Spring Boot进行获取,本次主要是个人的的一些分析操作 后面代码主要以分析为主,相关内容不会的,可以观看尚硅谷视频 一、下载配套…

MySQL数据库——多表查询练习

一、练习素材 创建表 -- 创建部门表 create table if not exists dept3( deptno varchar(20) primary key , -- 部门号 name varchar(20) -- 部门名字 );-- 创建员工表 create table if not exists emp3( eid varchar(20) primary key , -- 员工编号 ename varchar(20), -- 员…

【雕爷学编程】Arduino动手做(153)---2.4寸TFT液晶触摸屏模块6

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&am…

详解c++---布隆过滤器

目录标题 位图的优缺点为什么会有布隆过滤器:布隆过滤器的应用场景:布隆过滤器的实现布隆过滤器的测试 位图的优缺点 位图的优点: 1.位图可以节省空间,位图判断存储的数据是在还是不在只用一个比特位就可以记录数据出现的情况&a…

【毕业季·进击的技术er】大学生计算机毕业设计应该这样写

活动地址:毕业季进击的技术erhttps://marketing.csdn.net/p/f4a818f6455f3a9a7a20c89f60ad35f7 目录 扉页 摘要 目录 一 绪论 二、相关技术环境介绍 三、系统需求分析 四、系统架构设计 五、系统实现 六、系统测试 致谢 参考文献 以一个过来学长的角度来看…

SQl排序与分页

1. 排序数据 1.1 排序规则 使用 ORDER BY 子句排序 ASC(ascend): 升序DESC(descend):降序 ORDER BY 子句在SELECT语句的结尾。 1.2 单列排序 SELECT last_name, job_id, department_id, hire_date FROM employees ORDER…

元素配对----贪心1 (爱思创)

源代码 #include <bits/stdc.h> using namespace std; int main() {int n,data,sum0;cin>>n;vector<int> vec1,vec2;for(int i0; i<n; i){cin>>data;vec1.push_back(data);}for(int i0; i<n; i){cin>>data;vec2.push_back(data);}sort(ve…

linux下查看cpu使用率和内存占用

top top命令是Linux下常用的性能分析工具&#xff0c;能够实时显示系统中各个进程的资源占用状况&#xff0c;类似于Windows的任务管理器&#xff0c;下面详细介绍它的使用方法&#xff1b; top是一个动态显示过程&#xff0c;即可通过用户按键来不断刷新当前状态。如果在前台…

前端启动出现报错,提示vue-cli-service serve的解决办法

前端启动出现报错&#xff0c;提示vue-cli-service serve的解决办法 在命令行中使用命令 npm run dev运行从网上下载的一个vue项目时出现了以下报错&#xff1a; 原因&#xff1a; 原因是因为 node_modules文件的缺失 npm install再次执行 npm run dev启动成功

Java爬虫之CentOS7 安装Selenium+chrome+chromedriver+java【Java动态爬虫爬取数据环境安装一篇文章精通系列】

在这篇文章中&#xff0c;我们将学习如何在 CentOS 7 系统上安装 Java 动态爬虫所需的环境&#xff1a;Selenium、Chrome 浏览器和 ChromeDriver。这个教程将帮助你掌握如何搭建一个用于数据爬取的环境。 一、安装 chrome yum install https://dl.google.com/linux/direct/go…

JConsole或者JvisualVM远程连接jetty进行jvm监控

最近项目发现了服务有内存泄漏的问题&#xff0c;但是在jvm上并没有配置即jvm没有配置 -XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPath/tmp/heapdump.hprof 这两个参数&#xff0c;导致在发生了oom后只能看到日志中有OOM异常&#xff0c;其他的并不能分析出来&#xff0c;等…

手机快充协议

高通:QC2.0、QC3.0、QC3.5、QC4.0、QC5.0、 FCP、SCP、AFC、SFCP、 MTKPE1.1/PE2.0/PE3.0、TYPEC、PD2.0、PD3.0/3.1、VOOC 支持 PD3.0/PD2.0 支持 QC3.0/QC2.0 支持 AFC 支持 FCP 支持 PE2.0/PE1.1 联发科的PE&#xff08;Pump Express&#xff09;/PE 支持 SFCP 在PP…

【035】C++泛型编程(模板)实践:设计数组类模板模仿vector容器

C泛型编程&#xff08;模板&#xff09;实践 引言一、类模板的概述二、实现数组类模板三、类模板的继承3.1、类模板派生出普通类3.2、类模板派生出类模板 总结 引言 &#x1f4a1; 作者简介&#xff1a;专注于C/C高性能程序设计和开发&#xff0c;理论与代码实践结合&#xff0…

[MySQL]MySQL表的约束

[MySQL]表的约束 文章目录 [MySQL]表的约束1. 约束的概念2. 空属性(null/not null)3. 默认值(default)4. 列描述(comment)5. 填充零(zerofill)6. 主键(primary key)7. 自增长(auto_increment)8. 唯一键(unique)9. 外键(foreign key) 1. 约束的概念 数据库通过技术手段限制数据的…