【Python基础021】Python中的何如实现文件的读写

        Python中文件的读写在程序运行过程中是一个非常重要的操作,我们通常会将一些大量的临时数据暂时存放到一个临时文件,这就需要用到文件的读取与写入功能。话不多说,我们直接上才艺。

1、文本文件和二进制文件

        讲文件读写前,先说说文件中的数据组织形式,具体可以把文件分成文本文件和二进制文件两大类。

        (1)文本文件

        文本文件一般存储普通“字符”文本,在python中默认为unicode字符集(两个字节表示一个字符,最多可以表示65536个),可以使用记事本程序打开。

        (2)二进制文件

        二进制文件把数据内容用“字节”进行存储,无法用记事本打开。可以用Notepad++软件打开。

2、文件操作相关模块

        文件操作相关模块

模块名称

说明

io

文件流的输入和输出操作input output

os

基本操作系统功能,包括文件操作

glob

查找符合特定规则的文件路径名

fnmatch

使用模式来匹配文件路径名

fileinput

处理多个输入文件

filecmp

用于文件的比较

cvs

用于csv文件的处理

pickle和cPickle

用于序列化和反序列化

xml

用于xml数据处理

bz2, gzip,zipfile,zlib,tarfilc

用于处理压缩和解压缩文件

3、打开文件

        (1)打开文件方法语法

        Python中用open()方法来打开一个文件,并返回文件对象,在对文件进行处理过程中如果文件无法不存在的话,会抛出FileNotFoundError的错误

        这里需要注意一点:用open()方法打开文件后,不使用了一定要保证关闭文件对象,即调用close()方法,不然文件对象会一直存在,要是文件很大的话你的内存会占爆。

        open()方法的完整语法格式如下

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

其中:

        file: 必需,文件路径(相对或绝对)

        mode: 可选,文件打开模式,默认为“读取”模式

        buffering:设置缓冲

        encoding:编码格式,一般为utf-8

        errors:报错级别

        newline:区分换行符

        closefd:传入file的参数类型

        opener:设置自定义开启器,开启器的返回值必需是一个打开的文件描述符

        简化版格式如下

open(file, mode='r')

        (2)打开模式参数

        默认为文本模式,如果要以二进制模式打开,加上 b 。

模式

描述

t

文本模式

x

写模式,新建一个文件,如果该文件已存在则会报错

b

二进制模式

+

打开一个文件进行更新

U

通用换行模式

r

以只读方式打开文件。文件的指针将会放在文件的开头。(默认模式)

rb

以二进制格式打开一个文件用于只读。文件的指针将会放在文件的开头。

r+

打开一个文件用于读写。文件的指针将会放在文件的开头。

rb+

以二进制格式打开一个文件用于读写。文件的指针将会放在文件的开头。

w

打开一个文件只用于写入。如果该文件已存在则打开文件,并从头开始编辑,即原来的内容会被删除。如果该文件不存在,则创建新文件。

wb

以二进制格式打开一个文件用于写入。如果该文件已存在则打开文件,并从头开始编辑,即原来的内容会被删除。如果该文件不存在,则创建新文件。

w+

打开一个文件用于读写,如果该文件已存在则打开文件,并从头开始编辑,即原来的内容会被删除。如果该文件不存在,则创建新文件。

wb+

以二进制格式打开一个文件用于读写,如果该文件已存在则打开文件,并从头开始编辑,即原来的内容会被删除。如果该文件不存在,则创建新文件。

a

打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是,新的内容会被写入到已有内容的之后。如果该文件不存在,则创建新文件写入。

ab

以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是,新的内容会被写入到已有内容的之后。如果该文件不存在,则创建新文件写入。

a+

打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。也就是,新的内容会被写入到已有内容的之后。如果该文件不存在,则创建新文件写入。

ab+

以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是,新的内容会被写入到已有内容的之后。如果该文件不存在,则创建新文件写入。

        (3)file对象操作方法

        对文件对象进行操作的常用函数如下

方法

描述

file.close()

关闭文件,关闭后文件不能再进行读写操作

file.flush()

刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件,而不是被动的等到输出缓冲区写入

file.fileno()

返回一个整型的文件描述符,可以用在如os模块的read方法等一些底层操作上

file.isatty()

如果文件连接到一个终端设备返回True,否则返回false

file.next()

返回文件下一行

file.read([size])

从文件读取指定的字节数,如果未给定或为负则读取所有

file.readline([size])

读取整行,包括‘\n’字符

file.readlines([sizeint])

读取所有行并返回列表,若给定sizeint>0,返回总和大约为sizeint字节的行,实际读取值可能比sizeint较大,因为需要填充缓冲区

file.seek(offset)

设置文件当前指针位置

file.tell()

返回文件当前指针位置

file.truncate([size])

截取文件,截取的字节通过size指定,默认为当前文件指针位置

file.write([size])

将字符串写入文件,没有返回值。

file.writelines(sequence)

向文件写入一个序列字符串列表,如果需要换行则需要自己加入换行符

4、文件的读写

        (1)读取文件

        如果文件打开成功,接下来,调用 read()方法可以一次读取文件的全部内容,Python 把内容读到内存。调用 close()方法关闭文件。文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的。

        1)read()方法

file = open('test.txt', 'r')

text = file.read()

print(text)

file.close()

        这里一定要记住在最后要关闭文件,不要文件会一直占用你的内容。但是遇到打开文件后,需要写的程序太长的话,这种方法很容易到最后忘记写file.close()去关闭文件,所以,Python引入了with语句来自动调用close()方法关闭文件。

with open('test.txt', 'r') as file:

    print(file.read())

        从上面的操作方法以及实际运用中我们可以知道file.read()方法如果不给定参数,是默认读取文件中的全部内容,那么如果文件有10G,那你的内存会直接爆炸,所有当你需要导入的文件内容很多时,可以传入size参数,反复调用read(size)方法来获取文件内容。其中size为整数,表示从文件指针的位置开始读取size个字节。

        这里多说一句什么是指针

        在读取文件中的指针就是代表从文件的哪个位置开始读取文件,每次读取到哪个位置,指针就在哪个位置,只要你不关闭文件,那么下次你读取文件时,就会从上次读取完的位置继续读取文件内容,直到文件内容读取完毕。

with open('test.txt', 'r') as file:

    print(file.read(5))

    print(file.read(1))

    print(file.read(6))

    print(file.read(2))

        2)readline/s()方法

        readline()方法是读取文件的一行内容,包括'\n';readlines()方法是读取文件中所有行内容,并返回一个列表。

with open('test_line.txt', 'r') as file:

    print(file.readline()) # ABCDEFGHIJKLMNOPQRSTUVWXYZ 换行符

    print(file.readlines()) # ['123456789\n', 'hello python\n', 'I love Python']

        3)seek()方法

        当你上次读取了几个字节后就关闭了文件,然后下次想继续读取文件内容,并从上次读取的结尾开始读取时,就可以使用seek()方法来指定指针位置。

with open('test_line.txt', 'r') as f:

    f.seek(3) # 上次读取到第三个字节的位置

    print(f.read(4)) # DEFG

        4)tell()方法

        用于显示目前指针的位置

with open('test_line.txt', 'r') as f:

    print(f.read(4)) # DEFG

    f.tell() #4

        5)truncate()方法

        truncate()方法用于截取指针之后的内容,所以使用这个方法,文件的打开的模式必须是可写入,不然要报错。

with open('test_line.txt', 'r+') as f:

    f.seek(10) # 指定指针位置

    f.truncate()

    print(f.read())

        (2)写入文件

        写文件和读文件是一样的,唯一区别是调用 open()函数时,传入的文件模式是'w'或者'wb',表示写文本文件或写二进制文件。向文件写入内容使用 write(string)方法,该方法返回写入文件的字节数。

        1)write()方法

with open('test_new.txt', 'w') as f:

    f.write('123456')

        如果使用f.open()写文件时,操作系统往往不会立刻把数据写入磁盘,而是放到内存缓存起来,空闲的时候再慢慢写入。只有调用 f.close()方法时,操作系统才保证把没有写入的数据全部写入磁盘。忘记调用 close()的后果是数据可能只写了一部分到磁盘,剩下的丢失了。所以,使用 with语句比较好。

        2)writelines()方法

        writelines 方法需要通过参数指定一个字符串类型的列表,该方法会将列表中的每一个元素值写入文件。换行需要自己在每一行最后加入换行符 \n。

        注意,并没有 writeline 方法,写一行文本需要直接使用 write() 方法。

list1 = ['java\n', 'c\n', 'c++\n', 'python\n', 'javascript\n']

with open('writelines_test.txt', 'w+') as f:

    f.writelines(list1)
    
    f.seek(0)

    list2 = f.readlines()

    for l in list2:

        print(l.strip())

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

sqli.labs靶场(29到40关)

29、第二十九关 id1 id1 尝试发现是单引号闭合, -1 union select 1,2,3-- -1 union select 1,2,database()-- -1 union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schemasecurity)-- -1 union select 1,2,(select…

C#(C Sharp)学习笔记_前言及Visual Studio Code配置C#运行环境【一】

前言 这可以说是我第一次正式的踏入C#的学习道路,我真没想过我两年前是怎么跳过C#去学Unity3D游戏开发的(当然了,游戏开发肯定是没有成功的,都是照搬代码)。而现在,我真正地学习一下C#,就和去年…

STM32--揭秘中断(简易土货版)

抢占优先级响应优先级 视频学习--中断​​​​​​​

队列---数据结构

定义 队列(Queue)简称队,也是一种操作受限的线性表,只允许在表的一端进行插入,而在表的另一端进行删除。向队列中插入元素称为入队或进队;删除元素称为出队或离队。 队头(Front)&a…

单片机的50个电路

单片机 电源 声音模块 收音机 485 蓝牙 光耦 can 光敏电阻 单片机 矩阵 单片机电路 时钟 ADC 接口电路 红外发射 显示模块 红外接收 蜂鸣器驱动 流水灯 usb供电 烧录电路 数码管 EEPROM LCD1602电路 数码管 max485 红外开关 译码器 移位寄存器 步进电机控制 复位电路 下载电路 …

Python之列表的增删改查

列表的查 a ["klvchen", "tom", "jack", "james", "lily", "lucy"] print(a[1:4]) 结果: [tom, jack, james] 注意: 列表的切片的下标以 0 为开始。即: 下标0 --> klvchen…

基于相关向量机和特征选取的短期负荷预测MATLAB程序

微❤关注“电气仔推送”获得资料(专享优惠) 参考文献 相关向量机和特征选取技术在短期负荷预测中的应用——刘刚 运行环境——MATLAB 程序简介 通过改进传统的Relief算法,提出一种短期负荷预测特征输入量的选取方法,并使用相…

【webpack】技巧使用

webpack和TypeScript 安装webpack相关内容安装TS相关内容配置初始化数据初始化运行展示和目录展示报错解决(缺失文件配置) 安装前端必备神奇lodash测试一下entry配置index.html模板配置修改打包出来的index.html的titleinject注入chunks 属性多页面配置 …

C# 信号量(Semaphore)详细使用案例

文章目录 简介信号量的工作原理使用场景使用示例其他使用实例1. 数据库连接池管理2. 文件读写同步3. 生产者消费者问题4. 打印任务队列同步5. Web服务器并发请求限制 简介 在C#中,信号量(Semaphore)是.NET框架提供的一个同步类,位…

【C/Python】Gtk部件ListStore的使用

一、C语言 在GTK中,Gtk.ListStore是一个实现了Gtk.TreeModel接口的存储模型,用于在如Gtk.TreeView这样的控件中存储数据。以下是一个简单的使用Gtk.ListStore的C语言示例,该示例创建了一个列表,并在图形界面中显示: …

【Vue项目中使用videojs播放本地mp4的项目】

目录 以下是一个使用video.js播放本地mp4文件的Vue项目代码示例:1. 首先,在终端中使用以下命令安装video.js和video.js插件:2. 在Vue组件中,引入video.js和videojs-youtube插件:3. 配置video-js.css文件,可…

DS:时间复杂度和空间复杂度

创作不易,感谢三连! 一、算法 1.1 什么是算法 算法(Algorithm):就是定义良好的计算过程,他取一个或一组的值为输入,并产生出一个或一组值作为输出。简单来说算法就是一系列的计算步骤,用来将输入数据转化成输出结果。…

AI新工具(20240204)pot-desktop - 为用户提供便捷的文字翻译和识别功能;ChatALL - 能够同时向多个AI机器人发送提示

pot-desktop - 为用户提供便捷的文字翻译和识别功能 pot-desktop pot-desktop是一款备受欢迎的跨平台划词翻译和OCR软件,为用户提供便捷的文字翻译和识别功能。 功能点: 划词翻译:用户只需将鼠标光标悬停在需要翻译的文字上,po…

028 方法的重载

方法重载的定义 使用案例 public static void main(String[] args) {// 匹配到max(int a, int b)System.out.println(max(1, 3));// 匹配到max(double a, double b)System.out.println(max(1L, 3L));// 匹配到max(double a, double b, double c, double d),int自动…

3D 转换

1,3D的特点: 近小远大 物体后面遮挡不可见 2,3D移动 translate3d 3D移动在2D移动的基础上多加了一个可以移动的方向,就是z轴方向 transform:translateX(100px):仅仅是在x轴上移动…

MySQL查询缓存

MySQL查询缓存 MySQL在查询的时候首先会查询缓存,如果缓存命中的话就直接返回结果,不需要解析sql语句,也不会生成执行计划,更不会执行;如果没有命中缓存,则再进行SQL解析以及进行查询,并将结果返…

steam搬砖项目赚钱吗?操作流程看这一篇就够了

很多人应该听说过steam,它是国外一款知名的游戏社交平台,也是目前世界上最大的游戏平台之一。而steam搬砖项目,关键就是靠信息差。我们要做的就是在steam以低价买入道具装备,然后上架到网易buff卖出,赚取差价。 什么人…

mac下载工具:JDownloader 2 for Mac 中文版

JDownloader是一款开源的下载管理工具,主要使用Java编程语言开发,因此它能够在支持Java的操作系统上运行,包括Windows、Linux和Mac OS。这款软件专门为那些需要通过网盘下载文件的用户提供便利,它支持众多流行的网盘服务&#xff…

机器学习 | 解析聚类算法在数据检测中的应用

目录 初识聚类算法 聚类算法实现流程 模型评估 算法优化 特征降维 探究用户对物品类别的喜好细分(实操) 初识聚类算法 聚类算法是一种无监督学习方法,用于将数据集中的对象按照相似性分组。它旨在发现数据中的内在结构和模式,将具有相似特征的数据…

MySQL运维实战(5.3) MySQL数据乱码的一些情况

作者:俊达 表数据乱码 表数据出现乱码的情况通常是由于数据的真实编码与相关参数不一致引起的,其中包括常见的参数如character_set_client、character_set_results、字段编码以及终端编码等。确保这些参数保持一致,可以有效预防和解决乱码问…