Python文件操作

news2024/11/16 18:07:05

文章目录

  • 文件操作
    • 打开文件
    • 关闭文件
    • 读文件
    • 写文件
  • 使用上下文管理器

文件操作

打开文件

open函数

open函数的作用是打开一个文件,并返回打开的文件对象。该函数的常见调用方式如下:

f = open(file, mode, encoding)

参数说明:

  • file:待打开文件的路径,可以是绝对路径或相对路径。
  • mode:打开文件的方式,默认以文本读方式打开。
  • encoding:打开文件的编码方式。

打开文件的方式

打开文件的方式有以下几种:

打开方式含义
‘r’以读方式打开文件(默认)
‘w’以覆盖写方式打开文件,如果文件不存在则先创建再打开
‘a’以追加写方式打开文件,如果文件不存在则先创建再打开
‘x’创建文件并以写方式打开,如果文件已存在则会抛出异常
‘b’以二进制方式打开文件
‘t’以文本方式打开文件(默认)
‘+’打开磁盘文件进行更新(读取与写入)

打开文件的编码方式

文件的编码方式一般为“utf-8”,为了避免程序报错或者读取到的内容出现乱码,需要在打开文件时将encoding设置为“utf-8”。比如:

f = open('d:/Python环境/test.txt', 'r', encoding='utf-8')

说明一下:

  • encoding参数其实并不是open函数的第三个参数,open函数还有其他的一些参数,这些参数都带有默认值,因此在调用open函数时可以不用设置这些参数。
  • 因此如果在调用open函数时要设置encoding参数,就需要通过关键字参数的方式将‘utf-8’参数指定传递给encoding形参。

关闭文件

打开文件个数的上限

一个程序能同时打开的文件个数是有上限的,可以通过以下代码进行测试:

flist = []
count = 0
while True:
    f = open('d:/Python环境/test.txt', 'r')
    flist.append(f)
    count += 1
    print(f'打开文件的个数: {count}')

运行后程序后会发现,当程序打开了第8189个文件后,再使用open打开文件程序就会抛出异常。
在这里插入图片描述
算上一个程序默认打开的标准输入流、标准输出流和标准错误流,那么在我当前的运行环境下一个程序最多能同时打开的文件个数就是8192。

一个程序最多能同时打开的文件个数,其实也是可以通过设置某些系统选项来配置的,但无论把这里的文件个数设置得多高,一个程序能同时打开的文件个数终究是有上限的,因此为了避免文件资源泄露,程序员需要及时将不再使用的文件进行关闭,释放文件资源。

说明一下:

  • 上述代码中用列表对所有打开的文件对象进行了保存,如果不进行保存,那么Python内置的垃圾回收机制会在文件对象销毁的时候自动关闭文件。
  • 虽然垃圾回收机制能够自动关闭文件,但垃圾回收机制关闭文件不一定及时,所以仍然需要程序员手动对文件进行关闭,尽量避免依赖自动关闭。

close函数

close函数是文件对象的一个成员函数,其作用就是将打开的文件进行关闭。该函数的调用方式如下:

f = open('d:/Python环境/test.txt', 'r', encoding='utf-8')

f.close()

注意: 不能使用被关闭后的文件对象再对文件进行任何操作,否则程序会抛出异常。

读文件

下面用如下内容演示文件的读取操作:

床前明月光
疑是地上霜
举头望明月
低头思故乡

注意: 读文件时需要以'r'的方式打开文件。

read函数

使用read函数可以从文件中读取指定个数的字符。比如:

f = open('d:/Python环境/test.txt', 'r', encoding='utf8')
print(f.read(5))  # 床前明月光
f.close()

说明一下: 如果没有设置指定读取的字符个数,或指定读取的字符个数超过文件中的字符总数,则直接读取整个文件。

readline函数

使用readline函数可以从文件中读取一行字符。比如:

f = open('d:/Python环境/test.txt', 'r', encoding='utf8')
print(f.readline())  # 床前明月光
print(f.readline())  # 疑是地上霜
f.close()

说明一下: 再次调用readline函数则继续读取下一行。

readlines函数

使用readlines函数可以读取整个文件的内容。比如:

f = open('d:/Python环境/test.txt', 'r', encoding='utf8')
print(f.readlines())  # ['床前明月光\n', '疑是地上霜\n', '举头望明月\n', '低头思故乡']
f.close()

说明一下: readlines函数返回的是一个列表,列表中的每个元素即为文件的一行内容。

for循环遍历

使用for循环对文件对象进行迭代,可以每次循环读取文件中的一行内容。比如:

f = open('d:/Python环境/test.txt', 'r', encoding='utf8')
for line in f:
    print(line)
f.close()

需要注意的是,由于文件中的每一行末尾都带有换行符'\n',而print函数每次打印后也会打印一个换行符'\n',因此这里打印出来的每行文件内容之间会多出一个空行。

在这里插入图片描述

其实print函数有一个参数叫做end,该参数就是用来设定print输出的内容以什么结尾,而end参数的默认值就是'\n',如果不想让print每次输出完数据后再输出换行符,就可以将end的值设置为空字符串。比如:

f = open('d:/Python环境/test.txt', 'r', encoding='utf8')
for line in f:
    print(line, end='')
f.close()

此时打印输出内容就和文件中的内容一致了。

在这里插入图片描述

写文件

write函数

使用write函数可以将指定内容写入到文件中。比如:

# 第一次写入
f = open('d:/Python环境/test.txt', 'w', encoding='utf8')
f.write('2021')
f.close()
# 第二次写入
f = open('d:/Python环境/test.txt', 'w', encoding='utf8')
f.write('dragon')
f.close()
# 读取
f = open('d:/Python环境/test.txt', 'r', encoding='utf8')
print(f.read())  # dragon
f.close()

需要注意的是,如果以'w'的方式打开文件进行写入,那么每一次写入的内容会覆盖文件中原有的内容,因此这里写入两次后读取到的只有第二次写入的数据。

如果想写入的数据不会覆盖文件中的原有数据,就需要以'a'的方式打开文件。比如:

# 第一次写入
f = open('d:/Python环境/test.txt', 'a', encoding='utf8')
f.write('2021')
f.close()
# 第二次写入
f = open('d:/Python环境/test.txt', 'a', encoding='utf8')
f.write('dragon')
f.close()
# 读取
f = open('d:/Python环境/test.txt', 'r', encoding='utf8')
print(f.read())  # 2021dragon
f.close()

这时在读取文件内容时,就能读取到两次写入的数据。

使用上下文管理器

为了避免程序员忘记关闭文件,Python提供了上下文管理器:

  • 使用with语句打开文件。
  • 当with内部的代码块执行完毕后,就会自动调用close关闭文件。

代码示例:

with open('d:/Python环境/test.txt', 'r', encoding='utf-8') as f:
    line = f.readline()
    print(line)

说明一下: 在执行with内部的代码块时,无论因为什么原因而跳出with内部的代码块,都会自动调用close将对应的文件关闭。

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

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

相关文章

如何实现基于场景的接口自动化测试用例?

自动化本身是为了提高工作效率,不论选择何种框架,何种开发语言,我们最终想实现的效果,就是让大家用最少的代码,最小的投入,完成自动化测试的工作。 基于这个想法,我们的接口自动化测试思路如下…

Android App开发实战项目之大头贴App功能实现(附源码和演示 简单易上手)

需要图片集和源码请点赞关注收藏后评论区留言~~~ 一、需求描述 大头贴App有两个特征,第一个是头要大,拿来一张照片后把人像区域裁剪出来,这样新图片里的人头才会比较大,第二个是在周围贴上装饰物,而且装饰物还能随时更…

【Spring】——7、@Import注解给容器中快速导入一个组件

📫作者简介:zhz小白 公众号:小白的Java进阶之路 专业技能: 1、Java基础,并精通多线程的开发,熟悉JVM原理 2、熟悉Java基础,并精通多线程的开发,熟悉JVM原理,具备⼀定的线…

Ubuntu下关于cuda和cudnn 报错 现象及解决方案

详细流程:1、现象2、探索(可跳过)3、完美解决(真实原因)3.1 查看当前cuda版本3.2电脑有多个cuda版本,通过改变软链接改变指向3.3 写入系统环境:1、现象 啊这,重启丢失了个啥触摸的驱动&#xff…

Java并发 - (并发基础)

Java并发 - (并发基础) 1、什么是共享资源 堆是被所有线程共享的一块内存区域。在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例 Java中几乎所有的对象实例都在这里分配内存。方法区与堆一样,也是各个线程共享的一块内存区域,它用于存储已被…

Linux实用操作-----快捷键的使用(收藏系列)

推荐教程:Linux零基础快速入门到精通 ctrl c 强制停止 •Linux某些程序的运行,如果想要强制停止它,可以使用快捷键ctrl c •命令输入错误,也可以通过快捷键ctrl c,退出当前输入,重新输入 ctrl d 退出…

注意论文投稿风险,现投期刊会不会成为预警期刊呢?

中科院发布《国际预警期刊名单》 2021年12月31日,中国科学院文献情报中心期刊分区表团队发布《国际期刊预警名单(试行)》,用以提醒科研人员审慎选择成果发表平台,提示出版机构强化期刊质量管理。截至目前,…

Vue 实现拖拽模块(二)自定义拖拽组件位置

上文介绍了 拖拽添加组件 的简单实现,本文将继续给大家分享如何自定义拖拽组件位置的简单实现,文中通过示例代码介绍,感兴趣的小伙伴们可以了解一下 本文主要介绍了 Vue自定义拖拽组件位置的简单实现,具体如下: 效果图…

高空抛物检测方案设计(使用SOM进行轨迹分类)

文章目录前言一、技术方案介绍1.方案设计图2.流程介绍3.说明二、实际检测1.摄像头的安装2.实际检测三、误报解决误报事件1:飞鸟误报事件2:树叶误报事件3:被子解决方案轨迹展示原始轨迹SOM分类结果总结前言 高空抛物检测的关键是方案的设计&a…

MATLAB 绘图合集:分类散点图gscatter

本文主要介绍如何依据数据类别同时呈现数据散点图。 目录 说明 例子 使用默认设置绘图 使用数据类别来画图 使用多组数据类别来画图 创建并调整散点图 说明 gscatter(x,y,g) 创建 和 的散点图x,y按 分组g。输入x和 y是相同大小的向量。 例子 gscatter(x,y,g,c…

Jekyll 语句语法、功能的实现方法和结构介绍小手册

本文很长,建议使用侧边栏进行跳转。 本文虽然按照由浅入深的顺序介绍了 Jekyll 的语句语法和功能结构,但是主要用于快速查询一些 Jekyll 语句、功能的实现方法和结构介绍。 如果你想: 了解查看一些常用的 Jekyll 的相关命令和选项还请查看&…

第六章第一节:图的基本概念和存储及基本操作

文章目录1. 图的基本概念1.1 图逻辑结构的应用1.2 无向图,有向图1.3 简单图,多重图1.4 顶点的度,入度和出度1.5 顶点和顶点的关系描述1.6 连通图,强连通图1.7 研究图的局部——子图1.8 生成树1.9 生成森林1.10 边的权,…

手机怎么实现图片转文字操作?学会这三招就够了

随着互联网不断发展,我们手机的功能越来越丰富,现在基本上只需要一部手机,就能满足我们的多样化需求。比如想要提取书本中的文字,我们不需要再手动输入,只要将文字内容拍照下来,利用一些软件来提取图片中的…

【深度学习】argparse模块一些学习心得体会(2)| parser.parse_known_args() |位置参数 可选参数

文章目录前言一、位置参数和可选参数二、parser.parse_known_args()前言 之前我们写了一期命令行模块的使用介绍,但是依然有很多语法是没有介绍到的:比如parser.parse_known_args()这样的命令。这样的命令大量出现在各大开源项目中,今天我就…

外汇天眼:官网虚假宣传受到多重监管!FCA率先发出警告!

11月16日,英国金融行为监管局( FCA )发出最新警告,提示投资者警惕与 Trade Top FX 这家未经授权的公司打交道。 FCA警告称:Trade Top FX 在未经我们授权的情况下在英国提供金融服务或产品,如果一旦遭受资金损失,您将无…

Word处理控件Aspose.Words功能演示:在 Python 中比较两个 Word 文档

在各种情况下执行 Word 文档的比较以确定差异。各种在线工具允许您比较 Word 文档,但是,您可能需要在应用程序中实现比较功能。为实现它,本文展示了如何在 Python 中比较两个 Word 文档。 Aspose.Words for . Python 最新下载(qu…

子容器在启动期间失败

​ 遇错: 今天遇到一个Bug:A child container failed during start 中文翻译为:子容器在启动期间失败 事情是这样的,一开始我在做案例的时候使用的tomcat是本地集成的,项目能正常运行; 后来我将tomcat的…

Dopamine-PEG-N3,DOPA-PEG-azide,水溶性PEG试剂供应

1、名称 英文:Dopamine-PEG-N3,DOPA-PEG-azide 中文:多巴胺-聚乙二醇-叠氮 2、CAS编号:N/A 3、所属分类:Azide PEG Dopamine PEG 4、分子量:可定制,有2k、5k、3.4k、10k、20k、1k 5、质量…

【salesforce】Lightning Web Component Study Log —— Part 2

持续学习中… 文章目录版本管理V1.0.01. The Lightning Web Components Model1.1 Web演变1.2 LWC1.3Aura和LWC的互用性2. Creating Lightning Web Components2.1 在VSCode定义一个LWC组件2.2 文件构成2.3 客户端-服务端体系结构2.4 基础UI组件-JS2.5 基础UI组件-HTML2.6 基础UI…

艾美捷PEG-2000 DMG解决方案

艾美捷PEG-2000 DMG英文全名1,2-dimyristoyl-rac-glycero-3-methoxypolyethylene glycol-2000,中文名可对应翻译为二肉豆蔻酰甘油-聚乙二醇2000。它的分子式为C122H242O50,分子量2509.2(平均值),代表结构如下&#xff…