《0基础》学习Python——第十六讲 __文件读写

news2024/12/23 12:17:08

<文件读写>

一、什么是文件读写

        文件读写是指在Python程序中对文件进行读取写入操作。通过文件读写,可以读取文件中的数据,或者向文件中写入数据

        Python提供了多种文件读写的方式,其中最常用的方式是使用open()函数打开一个文件,并通过文件对象进行读写操作。文件读写的基本流程如下:

  1. 使用open()函数打开文件,可以指定文件路径、文件打开方式(如读取模式'r'、写入模式'w'、追加模式'a'等),并将返回的文件对象赋值给一个变量。

  2. 使用文件对象的read()方法读取文件内容,可以指定参数来读取指定数量的字符或者全部内容。

  3. 使用文件对象的write()方法写入数据到文件中,可以指定参数为要写入的字符串。

  4. 使用文件对象的close()方法关闭文件释放资源

        除了使用open()函数进行文件读写外,还可以使用with语句来自动管理文件的打开和关闭,以避免忘记关闭文件导致资源泄漏的问题。使用with语句打开文件后,文件会在with块结束后自动关闭。                

        另外,Python还提供了其他一些用于文件读写的函数和方法,如readline()、readlines()writelines()等,可以根据实际需要选择使用。

二、绝对位置、相对位置

        在Python中,绝对位置和相对位置用于描述文件或目录在文件系统中的位置关系。

        绝对位置是指文件或目录在整个文件系统中的具体路径。绝对位置使用完整的路径表示,从根目录开始一直到文件或目录的路径。例如,D:\soft\pycharm\code\pythonProject\123.txt,即从盘符开始一直往内部打开文件知道找到需要打开的文本文件名

        相对位置是指文件或目录相对于当前工作目录的位置关系。当前工作目录是指程序执行时所在的目录。相对位置使用相对于当前工作目录的路径表示。例如,如果当前工作目录是D:\soft\pycharm\code\pythonProject,那么pythonProject\123.txt就是一个相对位置,表示位于当前工作目录下的pythonProject目录下的123.txt文件。

        注意:相对位置存在相对概念 , ./ 表示同级文件夹下, ../ 表示上级目录下,

三、open方法

        open() 函数常用形式是接收两个参数:文件名(file)和模式(mode)

完整形式:
        
参数解释:
        file: 必需,文件路径(相对或者绝对路径)
        mode: 可选,文件打开模式,默认为 r
        encoding: 一般使用utf8编码
        errors: 报错级别
        newline: 区分换行符
        buffering: 设置缓冲
        closefd: 传入的file参数类型

四、常用mode 参数主要有

        'r':只读模式,文件不存在则返回异常
        'w':覆盖写模式,文件不存在则创建,存在则覆盖原文件
        'x':创建写模式,文件不存在则创建,存在则返回异常
        'a':追加写模式,文件不存在则创建,存在则追加写内容
        'b':二进制文件模式,与 r、x、w、a 组合使用,例如:‘rb’,二进制模式读
        't':文本文件模式,与r、x、w、a 组合使用,例如:‘rt’,以文本文件模式读
        '+':与r、x、w、a 一同使用,在原功能上增加同时读写功能,例如:‘r+’以读写模式打开文件。可以读取和写入文件内容。如果文件不存在则返回异常。  "w+":以读写模式打开文件。可以读取和写入文件内容。如果文件不存在,会创建新文件。如果文件存在,会清空文件内容。"a+":以追加读写模式打开文件。可以读取和追加写入文件内容。如果文件不存在,会创建新文件。"x+":以创建读写模式打开文件。可以读取和写入文件内容。如果文件已经存在则打印异常。

五、使用with语句

        由于文件读写时都有可能产生IOError,一旦出错,后面的f.close()就不会调用。所以,为了保证无论是否出错都能正确地关闭文件,可以使用try ... finally来实现:

但每次都这么写实在太繁琐,所以Python引入了with语句来自动调用close()方法

这和try ... finally是一样的,但代码更佳简洁,并且不必调用f.close()方法
注意:with open()打开文件也有他的弊端,如下代码:
if __name__ == '__main__':

    for i in range(10):
        pass
    # with open一个文件不需要关闭文件
    # 如果能够一次性写完 用这个比较好
    with open("./data.txt", "r", encoding="utf8") as fp:
        print(fp.readline(10))
    pass

加入循环之后就会不停地打开关闭,这样对文件会有很大程度的损坏,所以最好是一次性写完写入的文件内容,以防多次打开关闭文件。

六、读文件

        要以读文件的模式打开一个文件对象,使用Python内置的open()函数,传入文件名和标示符:

以下是三种打开文件时地址的格式,因为会有 \n等转义字符

        f = open('C:\\users\\shujia\\desktop\\test.txt', 'r',encoding="UTF-8")

        f = open('C:/users/shujia/desktop/test.txt', 'r',encoding="UTF-8")

        f = open(r'C:\users\shujia\desktop\test.txt', 'r',encoding="UTF-8")

        

        其中c:\\users\\shujia\\desktop\\test.txt表示文件的绝对位置,

        encoding="UTF-8"表示编码方式是UTF-8的形式

        ' r '标示符表示,这样成功地打开了一个文件,如果文件不存在,open()函数就会抛出一个IOError的错误,如果文件成功打开,调用read方法可以把内容读到内存,用一个str对象接收:

f.read() 得到'Hello, world!'文件使用完毕后调用close()方法可以关闭文件:f.close()

假设创建了一个文本文档 123.txt,其绝对路径为D:\soft\pycharm\code\pythonProject\123.txt

内部有这样的一段内容:

那么如果想读取文件内容,就可以用以下代码:

if __name__ == '__main__':

    fp=open(r"D:\soft\pycharm\code\pythonProject\123.txt",'r',encoding='utf-8')#打开文件夹

    print(fp.read(10))#其中的10表示打印的长度,如果不写则打印全部,如果写的很大,则打印全部内容

    fp.close()  #关闭文件夹

其打印结果为:

f.read(size):读取文件f的内容,size为文件长度,不写参数则读取文件全部内容

f.readline(size):读取文件中一行内容,size为该行的长度,不写参数size则读取第一行全部内容

f.readlines(size): 读取文件所用的行,参数表示读取的长度,如果第一行没有超过参数所示长度则打印第二行,以此类推,如果没有超过下一行则打印下一行全部内容,以列表形式返回

f.seek(offset): 改变当前文件操作指针位置,offset为0则为文件开头,为2则为结尾

if __name__ == '__main__':

    fp=open("D:/soft/pycharm/code/pythonProject/123.txt",'r',encoding='utf-8')#打开文件夹

    print(fp.read(10))#其中的10表示打印文件内容的长度,如果不写则打印全部文件内容,如果写的很大,则打印全部内容

    print(fp.readline(10))#表示打印第一行的内容,括号内参数10表示打印字符长度,如果不写则默认打印第一行全部内容

    print(fp.readlines(25))#返回的参数读取文件长度的列表,参数没到一行 读一行  参数超过一行读完下一行
    print(fp.readlines())# 读取所有的行 存入列表中
    fp.close()  #关闭文件夹

七、写文件

        写文件是指向文件中写入数据或内容的操作。在Python中,可以使用write()方法来写入文件。该方法接受一个字符串作为参数,并将其写入文件。写入时,文件指针会自动定位到当前写入的位置,并在写入后移动到下一个位置。

f.write(s)  :把字符串s写入文件f中

f.writelines(a):把列表类型的a中各元素连接起来写入文件

如下两个代码:

lt=['abc','ABC','12345','666']
f=open(f'list1.txt','w',encoding='utf-8') #以w模式创建一个文件夹list1.txt
f.write('-'.join(lt))  #把通过join函数处理过的数据写入列表
f.close()

其输出结果为生成一新的文件夹,写入内容如下:

        list1.txt: 

lt=['abc','ABC','12345','666']
f=open(f'list2.txt','w',encoding='utf-8')#以w模式创建一个文件夹list2.txt
f.writelines(lt)  #直接把列表内的数据全部连接起来写入文件list2.txt
f.close()

其输出结果为生成一新的文件夹,写入内容如下:

        list2.txt:

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

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

相关文章

ssrf复习(及ctfshow351-360)

1. SSRF 概述 服务器会根据用户提交的URL发送一个HTTP请求。使用用户指定的URL&#xff0c;Web应用可以获取图片或者文件资源等。典型的例子是百度识图功能。 如果没有对用户提交URL和远端服务器所返回的信息做合适的验证或过滤&#xff0c;就有可能存在“请求伪造"的缺陷…

huawei USG6001v1学习---信息安全概念

目录 1.什么是分布式&#xff1f; 2.什么是云计算&#xff1f; 3.APT攻击 4.安全风险能见度不足 5.常见的一些攻击 6.交换机转发原理&#xff1f; 7.各层攻击类型 7.1链路层&#xff1a; 7.2网络层&#xff1a; 7.3传输层&#xff1a; 7.4应用层&#xff1a; 1.什么…

mybatis plus json 格式转换踩坑记录

项目中有个字段存的是json数据。 我对应的实体类用的 fastjson2 中的 JsonObject 对象。 实体类&#xff1a; Data Accessors(chain true) TableName(value "plugin_template", autoResultMap true) public class PluginTemplateDo {TableId(type IdType.AUTO)p…

Mybatis<collection>实现一对多

时隔多年又用到这样的查询方式了,提前声明一下分页最后返回的数据会小于每页条数&#xff0c;废话不多说直接上代码&#xff01; Data public class PbcUserTargetTaskPageVO {ApiModelProperty("个人绩效指标id")private Long id;ApiModelProperty("月份"…

Modbus通讯接口选择分析

Modbus通讯接口选择分析 Modbus通讯接口的选择涉及到多个方面的考量&#xff0c;包括但不限于通讯距离、数据传输速率、成本、设备兼容性以及应用场景等。下面将从这些角度出发&#xff0c;对Modbus通讯接口的选择进行详细的分析。 Ip67防水面板法兰插座 通讯距离 Modbus通讯…

VLAN 划分案例详解

vlan 的应用在网络项目中是非常广泛的&#xff0c;基本上大部分的项目都需要划分 vlan&#xff0c;这里从基础的 vlan 的知识开始&#xff0c;了解 vlan 的划分原理。 为什么需要 vlan&#xff1a; 1、什么是 VLAN&#xff1f; VLAN&#xff08;Virtual LAN&#xff09;&…

【面试题】Redo log和Undo log

Redo log 介绍Redo log之前我们需要了解一下&#xff0c;mysql数据操作的流程&#xff1a; 上述就是数据操作的流程图&#xff0c;可以发现sql语句并不是直接操作的磁盘而是通过操作内存&#xff0c;然后进行内存到磁盘的一个同步。这里我们必须要了解一些区域&#xff1a; 缓…

推荐一款使用Java EE技术栈的企业应用定制化开发平台(带源码)

前言 在数字化转型的浪潮中&#xff0c;企业面临着多样化的信息系统建设需求。现有的软件系统往往存在定制化程度低、开发周期长、成-本高等问题。此外&#xff0c;随着企业规模的扩大和业务的复杂化&#xff0c;传统的软件系统难以满足灵活多变的业务需求。 为了解决这些痛点…

【前端7*】表格-表单2(弹窗在子组件)父子组件调用 vue element-ui

vue element-ui 中表单弹框的使用 写在最前面一、子组件 HelloWorld.vue1. 弹窗部分、将 visible 传值给父组件2.表单的 ruleForm 校验方法3.表单确认方法4. 提交确认方法&#xff1a;handleSummit5.表单渲染 二、父组件 HomeView.vue1.新增按钮、查看和编辑2.引用子组件弹窗3.…

【Linux网络】select{理解认识select/select与多线程多进程/认识select函数/使用select开发并发echo服务器}

文章目录 0.理解/认识回顾回调函数select/pollread与直接使用 read 的效率差异 1.认识selectselect/多线程&#xff08;Multi-threading&#xff09;/多进程&#xff08;Multi-processing&#xff09;select函数socket就绪条件select的特点总结 2.select下echo服务器封装套接字…

花开半夏,我决意仿一款答题小程序

不是清凉罢挥扇&#xff0c;自缘手倦歇些时。 ——杨万里&#xff08;宋&#xff09; 走过春的绚烂&#xff0c;路过初夏的清凉&#xff0c;我们迎来了炎炎夏日。蛙声阵阵&#xff0c;蝉鸣声声&#xff0c;稻花如白练&#xff0c;荷花别样红。 花开半夏&#xff0c;我决意仿一款…

C# 各版本语法新功能汇总

C# 8.0 以后 官网 C# 7.3 》》in C# 7.2 》》 命名参数、具名参数 》》》 条件 ref 表达式 C# 7.1 》》 default 运算符 default 在C#7.1中得到了改进&#xff0c;不再需要default&#xff08;T&#xff09;了 //变量赋值C#7.0 var s "字符串"; s default(s…

【常见开源库的二次开发】基于openssl的加密与解密——MD5算法源码解析(六)

一、MD5算法分析 &#xff1a; 1.1 关于MD5 “消息摘要”是指MD5&#xff08;Message Digest Algorithm 5&#xff09;算法。MD5是一种广泛使用的密码散列函数&#xff0c;它可以生成一个128位&#xff08;16字节&#xff09;的散列值。 RFC 1321: MD5由Ronald Rivest在1992…

某大型企业产品研发管理体系构建指南解决方案

获取完整PPT见下图 更多有关华为研发管理/IPD、MBSE、PLM、ERP、MES、数据治理、数字样机等方面免费解决方案、资料获取&#xff0c;请见下图

MySQL学习记录 —— 이십사 MySQL连接层和服务层

文章目录 1、整体架构2、连接层1、网络端口和连接管理线程2、客户端连接线程管理3、连接量管理 3、服务层1、服务管理和公共组件2、NoSQL接口与SQL接口以及Parser语法分析器3、优化器和缓存 4、SQL语句执行流程 1、整体架构 MySQL8.0服务器是由连接池、服务管理工具和公共组件…

BIOMOD2 物种分布模拟教程

原文链接&#xff1a;BIOMOD2 物种分布模拟教程https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247609373&idx5&sn492e7597314a5f9e358c35e4780b275f&chksmfa826dfacdf5e4ecf8ac06bdeba5469b31650bdbefbc8fb88b79c0f332714c453a4cc058d29f&token155…

Linux系统部署MySQL数据库

1.Linux插入光盘&#xff0c;使用df-h获取光盘信息&#xff0c;默认/dev/sr0文件为光盘文件 使用命令 mount -o ro /dev/sr0 /media进行手动挂载 mount -o ro /dev/sr0 /media 2.进入cd /etc/yum.repos.d目录 编辑配置yum库&#xff0c;编辑vim yum.repos [BaseOS] nameba…

【postgresql】pg_dump备份数据库

pg_dump 介绍 pg_dump 是一个用于备份 PostgreSQL 数据库的实用工具。它可以将数据库的内容导出为一个 SQL 脚本文件或其他格式的文件&#xff0c;以便在需要时进行恢复或迁移。 基本用法 pg_dump [选项] [数据库名] 命令选项 -h 或 --host&#xff1a;指定数据库服务器的主…

Python Linux环境(Centos8)安装minicoda3+jupyterlab

文章目录 安装miniconda安装python环境启动 最近服务器检查&#xff0c;我下面的服务器有漏洞&#xff0c;不得已重装了&#xff0c;正好记录下怎么从零到python写代码。 安装miniconda miniconda是anconda的精简版&#xff0c;就是管理python环境的得力助手。 # 创建一个名…

企业管理必备:学会寻找客户绝佳方法。

无论是日常沟通、工作交流&#xff0c;还是社交娱乐&#xff0c;微信都扮演着重要的角色。而在微信的使用过程中&#xff0c;添加好友是一项基本而重要的操作&#xff0c;但是您真的会添加微信好友吗&#xff1f; 试试这个神器——微信管理系统&#xff0c;下面分享它快速加客…