python 如何判断一个函数执行完成_三步搞定 Python 中的文件操作

18382a4da44bee9b3d5e4fe6a31d5f59.png

当程序运行时,变量是保存数据的好方法,但变量、序列以及对象中存储的数据是暂时的,程序结束后就会丢失,如果希望程序结束后数据仍然保持,就需要将数据保存到文件中。

Python 提供了内置的文件对象,以及对文件、目录进行操作的内置模块,通过这些技术可以很方便地将数据保存到文件(如文本文件等)中。

一、文件的概念

在计算机中,文件是以二进制的方式保存在磁盘上的。

文件分为文本文件和二进制文件。

1、文本文件

可以使用文本编辑软件查看,本质上还是二进制文件,例如:python 的源程序。

2、二进制文件

保存的内容不是给人直接阅读的,而是提供给其他软件使用的。例如:图片文件、音频文件、视频文件等等,二进制文件不能使用文本编辑软件查看。

Python 中,对文件的操作有很多种,常见的操作包括创建、删除、修改权限、读取、写入等,这些操作可大致分为以下 2 类:

  • 删除、修改权限:作用于文件本身,属于系统级操作。
  • 写入、读取:是文件最常用的操作,作用于文件的内容,属于应用级操作。

二、文件的基本操作

1、操作文件的步骤

文件的应用级操作可以分为以下 3 步,每一步都需要借助对应的函数实现:

  1. 打开文件:使用 open() 函数,该函数会返回一个文件对象;
  2. 对已打开文件做读/写操作:读取文件内容可使用 read()、readline() 以及 readlines() 函数;向文件中写入内容,可以使用 write() 函数。
  3. 关闭文件:完成对文件的读/写操作之后,最后需要关闭文件,可以使用 close() 函数。

2、打开文件的方式

在 Python 中,如果想要操作文件,首先需要创建或者打开指定的文件,并创建一个文件对象,而这些工作可以通过内置的 open() 函数实现。

语法如下:

file 
  • file:表示要创建的文件对象。
  • file_name:要创建或打开文件的文件名称。
  • mode:用于指定文件的打开模式。默认以只读(r)模式打开文件。
  • buffering:用于指定对文件做读写操作时,是否使用缓冲区。
  • encoding:手动设定打开文件时所使用的编码格式,不同平台的 ecoding 参数值也不同,以 Windows 为例,其默认为 cp936(实际上就是 GBK 编码)。

打开文件的常用模式

模式说明
以只读方式打开文件。文件的指针将会放在文件的开头,这是默认模式。如果文件不存在,抛出异常
w以只写方式打开文件。如果文件存在会被覆盖。如果文件不存在,创建新文件
a以追加方式打开文件。如果该文件已存在,文件指针将会放在文件的结尾。如果文件不存在,创建新文件进行写入
r+以读写方式打开文件。文件的指针将会放在文件的开头。如果文件不存在,抛出异常
w+以读写方式打开文件。如果文件存在会被覆盖。如果文件不存在,创建新文件
a+以读写方式打开文件。如果该文件已存在,文件指针将会放在文件的结尾。如果文件不存在,创建新文件进行写入

215d30488199dc49643a7b2e6865937d.png

open()是否需要缓冲区

通常情况下、建议大家在使用 open() 函数时打开缓冲区,即不需要修改 buffing 参数的值。

如果 buffing 参数的值为 0(或者 False),则表示在打开指定文件时不使用缓冲区;如果 buffing 参数值为大于 1 的整数,该整数用于指定缓冲区的大小(单位是字节);如果 buffing 参数的值为负数,则代表使用默认的缓冲区大小。

目前为止计算机内存的 I/O 速度仍远远高于计算机外设(例如键盘、鼠标、硬盘等)的 I/O 速度,如果不使用缓冲区,则程序在执行 I/O 操作时,内存和外设就必须进行同步读写操作,也就是说,内存必须等待外设输入(输出)一个字节之后,才能再次输出(输入)一个字节。这意味着,内存中的程序大部分时间都处于等待状态。

而如果使用缓冲区,则程序在执行输出操作时,会先将所有数据都输出到缓冲区中,然后继续执行其它操作,缓冲区中的数据会有外设自行读取处理;同样,当程序执行输入操作时,会先等外设将数据读入缓冲区中,无需同外设做同步读写操作。

3、read 方法 —— 读取文件

read 方法可以一次性读入并返回文件的所有内容。

read() 函数的基本语法格式如下:

file

其中,file 表示已打开的文件对象;size 作为一个可选参数,用于指定一次最多可读取的字符(字节)个数,如果省略,则默认一次性读取所有内容。

如果忘记关闭文件,会造成系统资源消耗,而且会影响到后续对文件的访问。

注意:read 方法执行后,会把文件指针移动到文件的末尾。

示例:

# 1. 打开 - 文件名需要注意大小写

在开发中,通常会先编写打开和关闭的代码,再编写中间针对文件的读/写操作!

4、按行读取文件内容

read 方法默认会把文件的所有内容一次性读取到内存。

如果文件太大,对内存的占用会非常严重。

readline 方法可以一次读取一行内容,包含最后的换行符“n”。方法执行后,会把文件指针移动到下一行,准备再次读取。

file

其中,file 为打开的文件对象;size 为可选参数,用于指定读取每一行时,一次最多读取的字符(字节)数。

读取大文件的正确姿势

# 打开文件

示例:

小文件复制

# 1. 打开文件

大文件复制

# 1. 打开文件

对于按行来读取文件,还有一个 readlines() 函数。

readlines() 函数用于读取文件中的所有行,它和调用不指定 size 参数的 read() 函数类似,只不过该函数返回是一个字符串列表,其中每个元素为文件中的一行内容。

和 readline() 函数一样,readlines() 函数在读取每一行时,会连同行尾的换行符一块读取。

5、文件指针

文件指针可以理解为一个标记,它标记从哪个位置开始读取数据。

第一次打开文件时,通常文件指针会指向文件的开始位置,当执行了 read 方法后,文件指针默认情况下会移动到读取内容的末尾。

如果执行了一次 read 方法,读取了所有内容,那么再次调用 read 方法,还能够获得到内容吗?

答案是不能,第一次读取之后,文件指针移动到了文件末尾,再次调用不会读取到任何的内容。

# 首先在 README 文件中写了8个1

6、向文件中写入数据

Python 中的文件对象提供了 write() 函数,可以向文件中写入指定内容。该函数的语法格式如下:

file

在写入文件完成后,一定要调用 close() 函数将打开的文件关闭,否则写入的内容不会保存到文件中。

这是因为,当我们在写入文件内容时,操作系统不会立刻把数据写入磁盘,而是先缓存起来,只有调用 close() 函数时,操作系统才会保证把没有写入的数据全部写入磁盘文件中。

写入文件示例:

# 打开文件

如果向文件写入数据后,不想马上关闭文件,也可以调用文件对象提供的 flush() 函数,它可以实现将缓冲区的数据写入文件中。

f 

三、文件/目录的常用管理操作

在终端 / 文件浏览器中可以执行常规的文件 / 目录管理操作,例如:创建、重命名、删除、改变路径、查看目录内容等等。

在 Python 中,如果希望通过程序实现上述功能,需要导入 os 模块。

1、文件操作

方法名说明示例
rename重命名文件os.rename(源文件名, 目标文件名)
remove删除文件os.remove(文件名)

2、目录操作

方法名说明示例
listdir目录列表os.listdir(目录名)
mkdir创建目录os.mkdir(目录名)
rmdir删除目录os.rmdir(目录名)
getcwd获取当前目录os.getcwd()
chdir修改工作目录os.chdir(目标目录)
path.isdir判断是否是文件os.path.isdir(文件路径)

文件或者目录的操作都支持相对路径和绝对路径。


564e152c148722c55444037a69aaf0cf.png

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

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

相关文章

一位资深程序员大牛给予Java初学者的学习路线建议

摘要: java学习这一部分其实也算是今天的重点,这一部分用来回答很多群里的朋友所问过的问题,那就是我你是如何学习Java的,能不能给点建议?今天我是打算来点干货,因此咱们就不说一些学习方法和技巧了&#x…

Vue + Spring Boot 项目实战(七):前端路由与登录拦截器

文章目录前言一、前端路由二、使用 History 模式三、后端登录拦截器3.1. LoginController3.2. LoginInterceptor3.3. WebConfigurer3.4. 效果检验四、Vuex 与前端登录拦截器4.1. 引入 Vuex4.2. 修改路由配置4.3. 使用钩子函数判断是否拦截4.4. 修改 Login.vue4.5. 效果检验前言…

高手如何实践HBase?不容错过的滴滴内部技巧

摘要: HBase和Phoenix的优势大家众所周知,想要落地实践却问题一堆?replication的随机发送、Connection的管理是否让你头痛不已?本次分享中,滴滴以典型的应用场景带大家深入探究HBase和Phoenix,并分享内核改…

JS 打印 data数据_数据表格 Data Table - 复杂内容的15个设计点

表格是桌面应用中常见的内容型组件,它包含大量的信息和丰富的交互形式,表格具有极高的空间利用率,结构化的展示保证了数据可读性。高效、清晰且易用是进行表格设计的原则性要求。本文将从表格的内容组织到交互作一次汇总,作为数据…

神龙X-Dragon,这技术“范儿”如何?| 问底中国IT技术演进

在CSDN总部会议室,阿晶首次见到了阿里云智能研究员、弹性计算技术负责人张献涛——这位不仅仅在阿里云智能内部,在业内也是响当当的虚拟化技术大牛。现在回想起来,当时聊了没两句,阿晶就问了这样一个问题,“阿里云这款…

干货 | 蚂蚁金服是如何实现经典服务化架构往 Service Mesh 方向的演进的?

摘要: 小蚂蚁说: 蚂蚁金服在服务化上面已经经过多年的沉淀,支撑了每年双十一的高峰峰值。Service Mesh 作为微服务的一个新方向,在最近两年成为领域的一个大热点,但是如何从经典服务化架构往 Service Mesh 的方向上演进…

Vue + Spring Boot 项目实战(八):导航栏与图书页面设计

文章目录前言一、导航栏的实现1.路由配置2.使用 NavMenu 组件二、图书管理页面2.1. LibraryIndex.vue2.SideMenu.vue3.Books.vue前言 之前讲过使用 Element 辅助前端页面的开发,但是只用到了比较少的内容,这一篇我们来做一下系统的核心页面——图书管理…

pmsm simulink foc 仿真_仿真软件教程

很多朋友都建议我做个视频的整理,方便没看过之前内容的朋友方便查找,我觉得这个确实很有必要。下面内容是关于仿真软件方面:仿真环境:Simlpis 8.0类型简介VMC和CMC的LLC控制器仿真对比 第一节图文电压模式和电流模式LLC控制器的简…

日志采集中的关键技术分析

摘要: 从日志投递的方式来看,日志采集又可以分为推模式和拉模式,本文主要分析的是推模式的日志采集。概述日志从最初面向人类演变到现在的面向机器发生了巨大的变化。最初的日志主要的消费者是软件工程师,他们通过读取日志来排查问…

限时早鸟票 | 2019 中国大数据技术大会(BDTC)超豪华盛宴抢先看!

2019 年12月5-7 日,由中国计算机学会主办,CCF 大数据专家委员会承办,CSDN、中科天玑数据科技股份有限公司协办的 2019 中国大数据技术大会,将于北京长城饭店隆重举行。届时,超过百位技术专家及行业领袖将齐聚于此&…

机器学习和数据科学领域必读的10本免费书籍

摘要: 暑期来了,别出去溜达了,看书学习一波~在这个暑假,有兴趣的可以阅读一下这些免费的有关机器学习和数据科学的书籍,他们能给你打开一扇看清机器学习和数据科学的窗。如果在阅读完这一文章后想知晓更多免…

microsoft账号登陆一直在加载_英雄联盟手游下载,附带拳头账号注册教程

欢迎关注【花卷来了】公众号。如果喜欢本期节目请点赞、再看、分享给朋友吧~软件资源请回复文章底部今日关键词获取/排版:萌萌哒花卷/来源:采集自网络今日主题:最新英雄联盟手游下载,附带拳头账号注册教程英雄联盟手游今天正式公测…

机器学习者都应该知道的五种损失函数!

摘要: 还不知道这五种损失函数?你怎么在机器学习这个圈子里面混?在机器学习中,所有的机器学习算法都或多或少的依赖于对目标函数最大化或者最小化的过程,我们常常把最小化的函数称为损失函数,它主要用于衡量…

linux服务器监控zabbix,Linux监控之--使用ZABBIX监控web服务器

使用ZABBIX监控web服务器实验拓扑图:实验思路:nginx添加状态统计模块,编写nginx对应的状态统计脚本。zabbix-server导入nginx模板,并对主机实现监控。实验环境角色IP地址操作系统版本软件包Zabbix_server192.168.0.158/24Centos6.…

Facebook 约十亿美元收购脑机技术公司,助攻AR研发;苹果宣布新款 Mac Pro 在美国生产;谷歌称已实现量子霸权…...

关注并标星星CSDN云计算极客头条:速递、最新、绝对有料。这里有企业新动、这里有业界要闻,打起十二分精神,紧跟fashion你可以的!每周三次,打卡即read更快、更全了解泛云圈精彩newsgo go go 小米MIX Alpha手机官方概念图…

知道这些用于数据科学和机器学习的GitHub存储库和Reddit主题吗?

摘要: 5月最热门的GitHub存储库和顶级Reddit讨论,戳进来~GitHub和Reddit都是比较有趣的平台,在这里,我不仅学习了数据科学的一些最佳应用,而且还了解数据科学家们是如何编程的。一直以来,GitHub都是开发人员…

l2-008 最长对称子串 (25分)_小学数学关于时间认识(时、分、秒)的几点总结

本文将通过对照学习一个个知识点,延伸出各种知识点的常用题型。一、时、分、秒之间的换算:1时60分 1分60秒这类题型考的是时间单位之间的换算,一种是大单位换小单位,一种是小单位换大单位。在之前的一篇文章里有关于换算的计算方法…

如何在阿里云上构建一个合适的Kubernetes集群

摘要: 声明 本文主要介绍如何在阿里云上构建一个K8S集群的实践,只是作为参考,大家可以根据实际情况做出调整。 集群规划 在实际案例中发现,有不少同学使用了很多的小规格的ECS来构建K8S集群,这样其实即没有达到省钱的目…

360断网急救箱_万事不求人,教你自己动手修复网络断网

日常使用中,我们经常会遇到原来好好的网络忽然无法上网的问题。在排除宽带没有问题,硬件交换机、路由器、网线没有问题的情况下,我们可以充分利用第三方工具的修复功能。前几天,我就遇到一例电脑不能上网的问题,同一办…

linux 网络dma驱动,S3C2410的Linux下DMA驱动程序开发

网上介绍Linux下的一般驱动程序开发示例浩如烟海,或是因为简单,关于DMA驱动的介绍却寥寥无几;近期因工作需要,花了几日时间开发了某设备在S3C2410处理器Linux下DMA通信的驱动程序,有感于刚接手时无资料借鉴的茫然&…