Python学习笔记15:进阶篇(四)文件的读写。

2024-06-20 23:04

本文主要是介绍Python学习笔记15:进阶篇(四)文件的读写。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文件操作

学习编程操作中,我觉得文件操作是必不可少的一部分。不管是读书的时候学习的c,c++,工作的前学的java,现在学的Python,没学过的php和go,都有文件操作的模块以及库的支持,重要性毫无疑问。

学习文件操作是编程技能体系中不可或缺的一部分,它对于数据管理、程序间通信、系统维护等多个方面都具有重要意义。

  1. 数据持久化:程序运行过程中产生的数据,通过文件操作可以保存到磁盘上,实现数据的长期存储。这样即使程序关闭或系统重启,数据依然存在,保证了信息的持久性。
  2. 信息交换:文件是程序之间交换数据的一种常见方式。一个程序可以通过读取另一个程序写入的文件来获取数据,或者将自己的处理结果写入文件供其他程序使用,增强了软件之间的兼容性和协同工作能力。
  3. 配置与日志:许多应用程序会使用配置文件来存储设置信息,使得用户无需修改源代码即可调整程序行为。同时,通过记录日志文件,开发者可以追踪程序运行状态,便于调试和故障排查。
  4. 资源管理:在开发多媒体应用、网页服务或其他需要处理大量静态资源(如图片、视频、文档)的场景中,有效地读取、写入和管理这些文件资源是必不可少的技能。
  5. 提升编程能力:掌握文件操作能够加深对操作系统如何管理和访问文件系统的理解,这是编程基础中的重要一环。它涉及到路径管理、权限控制、缓冲区使用等概念,有助于培养良好的编程习惯和问题解决能力。
  6. 跨平台开发:了解不同操作系统(如Windows、Linux、macOS)下文件操作的差异,可以帮助开发者编写更加健壮、可移植的代码,适应多样化的开发环境。

文件读取是Python标准库就支持的操作,也就是说我们可以直接使用内置函数来进行文件的读取,市面上也许有第三方库支持更加细腻功能更多更简便的文件操作,但是今天我们只讲标准库中的操作。

废话不多说,进入正题。

文件路径

在将实际的操作之前,讲一下文件的相对路径和绝对路径。对后面操作文件时有一定的帮助。

在计算机文件系统中,文件路径是用来定位文件位置的字符串。

根据路径参照点的不同,文件路径主要分为两类:相对路径和绝对路径。

绝对路径(Absolute Path)
绝对路径是从文件系统的根目录(如 Windows 的盘符 C:,Linux 和 macOS 的 /)开始的完整路径,能够唯一确定文件的位置,不依赖于当前工作目录。
例如:

Windows: C: Users/Username/Documents/example.txt
Linux/macOS: /home/user/documents/example.txt

相对路径(Relative Path)
相对路径是相对于当前工作目录(即你当前所在的位置)的路径。使用相对路径时,文件的位置是相对于执行代码或命令时的工作目录来决定的。
例如:

如果当前目录是 /home/user/documents/,那么引用 example.txt 的相对路径只需写成 example.txt
或者 ./example.txt(. 表示当前目录)。
要访问同一级目录下的 pictures 文件夹里的 image.jpg,可以写成 pictures/image.jpg。
使用 … 可以向上一级目录移动,如从 /home/user/documents/ 访问 downloads 文件夹下的文件,则路径为 …/downloads/file.zip。

选择何时使用
绝对路径适用于需要明确指定文件位置,不受当前工作目录影响的场景,如配置文件中的资源路径、系统服务启动脚本等。
相对路径更适用于项目内部文件引用,特别是在代码或脚本中,因为它们往往与项目的结构紧密相关,且易于迁移和维护。
理解并恰当使用这两种路径类型,对于编写跨平台、易维护的代码至关重要。

文件读取

  1. 创建读取目标和读取模块。我先新建一个txt文件用作读取目标。同时新建一个文件模块,用于今天的学习。
    在这里插入图片描述

  2. 读取文件。
    在这里插入图片描述
    两行行代码,一行完成了文件的读取,一行完成了打印。注意我的文件内容是中文,所以指定了编码,不指定的话可能会报错。

    with open('test_file.txt', encoding="utf-8") as file_object:print(file_object.read())
    

    with:关键字with 在不再需要访问文件后将其关闭。通常在进行流操作的时候,会有open操作和对应的close操作,这种操作的目的是保证流能够正确的开启和关闭,当流未关闭时,再次访问可能出现未知的错误,甚至流不关闭本身就会导致问题。但是手动的close流,有一个问题就是并非在任何情况下都能轻松确定关闭文件的恰当时机,但通过使用with,可让Python去确定:你只管打开文件,并在需要时使用它,Python自会在合适的时候自动将其关闭。

    open()。这是Python中读取文件的函数。介绍一下open函数得入参:

  1. file (必填): 字符串类型,表示要打开的文件的路径和名称。
  2. mode (可选): 字符串类型,表示文件的打开模式。常见的模式有:
    2.1 ‘r’: 读取(默认)
    2.2 ‘w’: 写入,会覆盖原有文件内容
    2.3 ‘a’: 追加,在文件末尾添加内容
    2.4 ‘b’: 二进制模式
    2.5 ‘+’: 读写模式,可以与上述模式组合,如 ‘r+’, ‘w+’, ‘a+’
  3. encoding (可选): 字符串类型,指定文件的编码方式,如 ‘utf-8’, ‘gbk’。默认为 None,则使用系统默认编码。
  4. buffering (可选): 控制缓冲策略。默认为 -1,表示使用默认缓冲策略;0 表示不缓冲;大于 1 的整数表示缓冲区大小;1 表示行缓冲(对于文本模式)。
  5. errors (可选): 指定如何处理编码和解码错误,如 ‘strict’, ‘ignore’, ‘replace’ 等。
  6. newline (可选): 控制换行符的处理方式,如 ‘n’, ‘rn’, ‘’(读取时不转换,写入时不添加)。
  7. closefd (可选): 布尔值,对于特殊文件描述符是否关闭,默认为 True。
  8. opener (可选): 一个可调用对象,用于自定义文件打开方式。

在示例中,我们使用两个参数,必填的文件路径和选填的文件编码方式。文件路径因为我们是放在了项目目录里面。所以直接用的相对路径,当然我们也可以使用绝对路径。但是要注意的是Windows系统,在文件路径中使用的是反斜杠。

with open('D:\测试文件\test_file.txt', encoding="utf-8") as file_object:print(file_object.read())

在这里插入图片描述
使用绝对路径的方式,我们同样打开并读取了在D盘中的test_file.txt文件。

  1. 按行读取文件
    通过for循环,我们可以直接读取文件中的每一行的数据,并且将数据放到一个列表中进行存储。由于我们在文件中是本身就通过回车换行,所以读取的内容也带换行符,我们可以通过字符串去空白的函数去掉。
file_line_list_1 = []
file_line_list_2 = []
with open('test_file.txt', encoding="utf-8") as file_object:line_num = 0for line in file_object:line_num += 1print(f"我是第{line_num}行,内容是{line}")file_line_list_1.append(line)file_line_list_2.append(line.rstrip())
print(file_line_list_1)
print(file_line_list_2)

在这里插入图片描述

  1. 读取指针
    我们在分行读取完文件后,在进行打印读取内容的操作,发现打印的内容是空的,为什么?
with open("D:\\测试文件\\test_file.txt", encoding="utf-8") as file_object:for line in file_object:print(line)print("============分隔===========")print(file_object.read())

在这里插入图片描述

大家要注意,Python读取文件的时候有一个指针,读取以后指针会停在最后读取的位置,在上述代码中,我们分行读取后,指针已经停留到了最后一行,再进行读取的时候,就读取到了空的内容。

这种情况怎么办呢?使用seek()函数,可以修改指针位置。
seek()函数接收两个参数:

offset:偏移量,即从参照点移动的字节数。
whence:可选参数,默认值为 0,表示从文件开头开始计算偏移量;如果为1,则表示从当前位置开始计算;如果为 2,则表示从文件末尾开始计算。

所以我们在第二次读取前调用一次seek函数即可。

with open("D:\\测试文件\\test_file.txt", encoding="utf-8") as file_object:for line in file_object:print(line)print("============分隔===========")file_object.seek(0)print(file_object.read())

在这里插入图片描述
文件内容成功读取并打印。

文件写入

在介绍open函数入参的时候,其实已经讲到了怎么写入文件。通过open函数的传参。
在Python中,文件就是打开和关闭,区别在打开的模式是读取还是写入又或者是其他模式。

with open('test_file.txt', mode="w", encoding="utf-8") as file_object:file_object.write("给测试文件写点东西")

在这里插入图片描述
文件执行在运行框没有信息,但是打开目标文件发现,内容已经写入。注意前面已经说过,“w"是覆盖模式。
在这里插入图片描述
如果你想追加内容,使用mode参数值应该设置为"a”。附加模式下,如果你输入的文件不存在,还会给你创建一个文件。

with open('test_file.txt', mode="a", encoding="utf-8") as file_object:file_object.write("给测试文件写点东西")

在这里插入图片描述
可以看到直接拼接在了最后一行上面,如果你想换下一行拼接,应该怎么办呢?加上换行符,就这么简单!

多次写入

其实多次写入相比和单次相比,重复调用write函数即可。

with open('test_file.txt', mode="a", encoding="utf-8") as file_object:file_object.write("\n给测试文件写一点东西")file_object.write("\n给测试文件写两点东西")file_object.write("\n给测试文件写三点东西")file_object.write("\n给测试文件写四点东西")file_object.write("\n给测试文件写五点东西")file_object.write("\n给测试文件写六点东西")

在这里插入图片描述
多行写入也成功了,是不是很简单。

结尾

文件的读取和写入也讲到这里,只是初级的应用,应对大部分需要操作文件的场景就够了,大家要好好练习。进阶阶段的知识,不敲几次加深印象等于白学了。

点赞收藏关注,感谢支持!!!

作业

  1. 读取文件。
  2. 逐行读取并进行添加条件语句进行输出。
  3. 写入文件,更改文件信息。
  4. 使用附加模式,创建一个文件。

这篇关于Python学习笔记15:进阶篇(四)文件的读写。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1079505

相关文章

Python调用Orator ORM进行数据库操作

《Python调用OratorORM进行数据库操作》OratorORM是一个功能丰富且灵活的PythonORM库,旨在简化数据库操作,它支持多种数据库并提供了简洁且直观的API,下面我们就... 目录Orator ORM 主要特点安装使用示例总结Orator ORM 是一个功能丰富且灵活的 python O

Python使用国内镜像加速pip安装的方法讲解

《Python使用国内镜像加速pip安装的方法讲解》在Python开发中,pip是一个非常重要的工具,用于安装和管理Python的第三方库,然而,在国内使用pip安装依赖时,往往会因为网络问题而导致速... 目录一、pip 工具简介1. 什么是 pip?2. 什么是 -i 参数?二、国内镜像源的选择三、如何

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

如何通过Python实现一个消息队列

《如何通过Python实现一个消息队列》这篇文章主要为大家详细介绍了如何通过Python实现一个简单的消息队列,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录如何通过 python 实现消息队列如何把 http 请求放在队列中执行1. 使用 queue.Queue 和 reque

Python如何实现PDF隐私信息检测

《Python如何实现PDF隐私信息检测》随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要,本文将介绍如何使用Python检测PDF文件中的隐私信息,需要的可以参考下... 目录项目背景技术栈代码解析功能说明运行结php果在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形

使用Python快速实现链接转word文档

《使用Python快速实现链接转word文档》这篇文章主要为大家详细介绍了如何使用Python快速实现链接转word文档功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 演示代码展示from newspaper import Articlefrom docx import

Python Jupyter Notebook导包报错问题及解决

《PythonJupyterNotebook导包报错问题及解决》在conda环境中安装包后,JupyterNotebook导入时出现ImportError,可能是由于包版本不对应或版本太高,解决方... 目录问题解决方法重新安装Jupyter NoteBook 更改Kernel总结问题在conda上安装了

Python如何计算两个不同类型列表的相似度

《Python如何计算两个不同类型列表的相似度》在编程中,经常需要比较两个列表的相似度,尤其是当这两个列表包含不同类型的元素时,下面小编就来讲讲如何使用Python计算两个不同类型列表的相似度吧... 目录摘要引言数字类型相似度欧几里得距离曼哈顿距离字符串类型相似度Levenshtein距离Jaccard相

Python安装时常见报错以及解决方案

《Python安装时常见报错以及解决方案》:本文主要介绍在安装Python、配置环境变量、使用pip以及运行Python脚本时常见的错误及其解决方案,文中介绍的非常详细,需要的朋友可以参考下... 目录一、安装 python 时常见报错及解决方案(一)安装包下载失败(二)权限不足二、配置环境变量时常见报错及

Python中顺序结构和循环结构示例代码

《Python中顺序结构和循环结构示例代码》:本文主要介绍Python中的条件语句和循环语句,条件语句用于根据条件执行不同的代码块,循环语句用于重复执行一段代码,文章还详细说明了range函数的使... 目录一、条件语句(1)条件语句的定义(2)条件语句的语法(a)单分支 if(b)双分支 if-else(