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

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+ 以读写方式打开文件。如果该文件已存在,文件指针将会放在文件的结尾。如果文件不存在,创建新文件进行写入

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(文件路径)

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


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

  1. python 如何判断一个函数执行完成_菜鸟来也!50行Python代码一键整理桌面

    我的老同学小马忙于找工作,整天被各种照片信息,和面试笔试资料搞的焦头烂额,很多文件来不及处理,全部都堆放在了一起,久而久之,就造成了桌面非常的混乱,如下图所示: 乱糟糟的桌面,让心情也会潜移默化的变得 ...

  2. python装饰器带参数函数二阶导数公式_一文搞定Python装饰器,看完面试不再慌

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是Python专题的第12篇文章,我们来看看Python装饰器. 一段囧事 差不多五年前面试的时候,我就领教过它的重要性.那时候我Pyt ...

  3. python 如何判断一个函数执行完成_Python核心编程的四大神兽迭代器、生成器 、闭包以及装饰器...

    本文将主要分为4大部分,分别介绍Python核心编程中的迭代器.生成器 .闭包以及装饰器. 生成器 生成器是生成一个值的特殊函数,它具有这样的特点:第一次执行该函数时,先从头按顺序执行,在碰到yiel ...

  4. python 如何判断一个函数执行完成_Python 函数为什么会默认返回 None?

  5. 7步搞定Python数据可视化,业界大牛出品教程,Jupyter、Colab都有在线版

    郭一璞 发自 凹非寺  量子位 报道 | 公众号 QbitAI 做图表,谁不会?打开Excel,自动就可以生成各种各样的图表. 但你看这些图表呢? 结合真实地理数据,展现美国每个县的失业率. 全球自然 ...

  6. python机器学习日志.01 ———三天搞定Python基本功.网页提纲

    大纲( Outline) 第1天:Python和科学编程介绍. Python中的基础知识: - 数据类型 - 控制结构 - 功能 - I/O文件 第2天:用Numpy,Scipy,Matplotlib ...

  7. dfema规则_六步搞定DFMEA表格

    原标题:六步搞定DFMEA表格 档即用www.downjy.com向您分享如下的"六步搞定DFMEA表格"的知识.原版文档下载方法参照文章底部说明~ 1‍DFMEA的重大作用 FM ...

  8. python核心理念_《三天搞定Python基础概念之第一天》中文版

    前言: 首先,非常感谢Jiang老师将其分享出来!本课件非常经典! 经过笔者亲测,竟然确实只要三天,便可管中窥豹洞见Python及主要库的应用.实属难得诚意之作! 其次,只是鉴于Jiang老师提供的原 ...

  9. learnpythonthehardway中文版_《三天搞定Python基础概念之第一天》中文版

    前言: 首先,非常感谢Jiang老师将其分享出来!本课件非常经典! 经过笔者亲测,竟然确实只要三天,便可管中窥豹洞见Python及主要库的应用.实属难得诚意之作! 其次,只是鉴于Jiang老师提供的原 ...

最新文章

  1. 在IE中测试调用Web Service
  2. cuda 历史版本下载
  3. MAC Opencv include选择
  4. WebSphere MQ 自动启动发送方通道
  5. 案例实作图解.Net Entity Framework 教程
  6. 数学系鄙视物理系的经典桥段,全部看懂了算我输!
  7. 基于视觉的烟雾/火焰检测数据集整理(检测、识别、分割)
  8. 鼠标移入通过时间控制实现两个不同步的动画效果
  9. 天猫二面:内存耗尽后 Redis 会发生什么?
  10. AWVS12 docker版本安装
  11. 【从零开始学习SLAM】ros navigation AMCL move_base配置文件 A-Star Dijkstra 算法原理
  12. 支付系统架构模块划分与设计
  13. 百度搜索排名优化和SEO搜索引擎优化
  14. 在编辑word时,如何查找和替换空格符呢?
  15. 根据经纬度查询地理位置API
  16. Linux时间设置和motd设置
  17. educoder中Spark GraphX—构建图及相关操作
  18. [技巧]新版gitbook导出pdf电子书
  19. 【RHCE】NFS服务器简介及简单共享目录配置
  20. linux 路由转发 ipv6,IPv6路由

热门文章

  1. Message Flood
  2. Zabbix 安装agent
  3. SLS机器学习最佳实战:批量时序异常检测
  4. 90后实习生,是如何成长为阿里云分布式NoSQL领域专家
  5. 之前写的 JSX 的条件语句竟然存在那么多 Bug?
  6. 安全攻击层出不穷,绿盟科技“智慧安全 3.0”安全防护再升级
  7. “精耕细作”桌面云市场的锐捷,重磅发布三擎云桌面
  8. 破解面试难题8个角度带你解读SQL面试技巧!
  9. 996!007!同是敲了2万行代码,为什么他却晋升了?
  10. 华为组织架调整,CloudAI升至第四大BG,打通全球第一款集成5G模组的4K直播编码器网络通信服务;谷歌宣布与IBM合作……...