Python基础—读写模式

文章详细介绍了Python中数据持久化的重要性,以及如何进行文本文件的读写操作,包括不同模式如w、a、r的使用,还有二进制文件的读写。此外,文章还阐述了CSV文件的读写操作,如何利用csv模块高效处理表格数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、数据持久化

问:为什么要数据持久化?

持久化将程序数据在持久状态和瞬时状态转化的机制

将瞬时状态(内存中的数据,是不能永久保存)转换为持久数据(硬盘中的数据,能够长久保存)

持久化的应用是将内存中的对象存储在硬盘、数据库等位置

二、文本文件的读写模式

1. 使用Python打开一个文件:open方法

语法:open(参数1, 参数2, 参数3, …)

参数2:mode —— 文件打开的读写方式

注意:文件的读或者写不能同时进行

2. 文件打开的模式

w:只写,先清空内容再写入内容,如果文件不存在,先创建,再写入

a: 只写,直接在文件末尾追加写,如果文件不存在,先创建,再写入

r: 只读,如果文件不存在,报错

3. 打开文件以后操作文件的数据类型

t: 读写的数据类型必须是文本(text)

b:读写的数据类型必须是二进制(bytes)

上述两种模式各选其一组合使用

例如:wt、 tw、 at、 ta、 rt、 tr等等

二进制文件(图片、音频、视频等)必须以b模式打开,文本文件等要用t模式打开

三、文本文件的写操作

1. open方法的使用

open方法用于打开一个文件并返回被打开的这个文件对象

open(参数1,参数2,参数3,…)

参数1:file —— 文件的路径以及文件名(文件路径分为相对路径和绝对路径,编程中仅仅使用相对路径)

参数2:mode —— 文件打开的读写模式

参数3:编码方式 —— encoding:一般将encoding写为utf-8,但是有些文件编码不是utf-8,而是gbk等编码

绝对路径:以盘符为参照物,对盘符来说文件的位置

相对路径:以某个文件为参照物,另一个文件的位置

3. 文本文件的写操作

①打开一个文件,如果文件不存在,创建文件

file = open('./古诗.text', 'wt', encoding='utf-8')

②向打开的文本文件中写入内容

file.write('静夜思\n')
file.write('唐.李白\n')
str_1 = '床前明月光,\n疑是地上霜,\n举头望明月,\n低头思故乡。\n'
file.write('str_1')

③关闭文件

file.close()

运行后系统生成一个古诗.text的文件,打开如下:

在这里插入图片描述

I/O operation on closed file.

I/O —— input / out

文件关闭之后不能再进行I/O操作

四、文本文件的读操作

①打开文件(读写同一个文件的编码方式需要保持一致)

file = open('古诗.text', 'rt', encoding='utf-8')

②读取数据

1.readline():每次只读取一行数据,字符串类型

data_1 = file.readline()
print(data_1)

运行结果:静夜思

2.read():能够将文件中的数据一次性读取出来

# data_2 = file.read()
# print(data_2)

运行结果:床前明月光,
         疑是地上霜,
         举头望明月,
         低头思故乡。

3.readlines():一次性将所有行读出来,每一行作为一个元素保存在列表中

data_3 = file.readlines()
print(data_3)

运行结果:['床前明月光,\n', '疑是地上霜,\n', '举头望明月,\n', '低头思故乡。\n', '\n']

4.关闭文件

file.close()

五、二进制数据的读写

电脑中的所有文件都是以二进制数据保存的。有些文件,例如word、ppt、txt、pdf这些文件,里面保存的信息是供人阅读的,人接受的是文本、十进制等,所以这些信息是经过计算机处理的

相比于文本文件的读写,二进制数据的读写不用encoding,且只能使用b

1.二进制文件的读

file = open('图片1.jpeg', 'rb')
data = file.read()
print(data)

# 关闭文件
file.close()

2.二进制文件的写

file1 = open('图片2.jpeg', 'wb')
file1.write(data)

# 关闭文件
file.close()

六、CSV文件的读写操作

①CSV文件的写操作

1. 导入csv模块

import csv

2.以utf-8编码和写模式创建或打开 “学生成绩.csv” 文件

wt / rt / at,涉及到文本文件类型的读写时,t可以省略不写

将newline改为’ ',是因为windows的换行定义是 \r \n,Mac定义的换行操作为 \r,Linux定义的换行操作为 \n

统一将newline改为’ ',抵消掉不同系统产生的换行影响

file = open('学生成绩.csv', 'w', encoding='utf-8', newline='')

3.使用csv模块中的writer类对文件对象进行写操作,返回一个具有写功能的writer对象

file_writer = csv.writer(file)

4.写入数据

writerow:单行写入,将一个列表看做一行数据,列表中的每个元素是这一行的单元格

writerows:多行写入,将一个二维列表中的每一个一维列表分别写入其对应的一行,一维列表中的每个元素对应这一行的单元格

columns = ['姓名', '性别', '年龄', '成绩']
students = [['小邱', '男', 21, 50], ['小王', '女', 23, 100], ['小曾', '女', 22, 100], ['小邹', '女', 25, 100]]

file_writer.writerow(columns)
file_writer.writerows(students)

# 关闭文件
file.close()

最后运行打开生成的学生成绩.csv文件,如下显示:

在这里插入图片描述

②CSV文件的读操作

1. 导入csv模块

import csv

2. 打开CSV文件

file = open('学生成绩.csv', 'r', encoding='utf-8')

3. 使用csv模块的reader类对文件进行读操作,返回包含有数据的一个可迭代对象

可迭代对象:能够遍历的数据对象

file_reader = csv.reader(file)
for row in file_reader:
	print(row)

# 关闭文件
file.close()

运行结果:['姓名', '性别', '年龄', '成绩']
         ['小邱', '男', '21', '50']
         ['小王', '女', '23', '100']
         ['小曾', '女', '22', '100']
         ['小邹', '女', '25', '100']

通过观察发现,Pycharm打开的csv文件和txt文本文件几乎没有差别。

csv文件虽然是以表格的样式展示数据,但是csv文件的本质是文本文件。

### Python 文件读写模式详解 #### 基本概念 文件读写是程序设计中的基础操作之一,在Python中,`open()`函数用于创建一个文件对象,该对象封装了对文件的各种访问功能。文件对象支持多种不同的打开模式,每种模式决定了如何与文件交互。 #### 主要的文件读写模式 - **只读模式 (`'r'`)** 使用此模式时,文件必须已经存在;否则将引发 `FileNotFoundError` 错误。这种情况下只能执行读取操作而无法修改文件内容[^4]。 - **覆盖模式 (`'w'`)** 如果指定路径下的文件已存在,则会被清空并重新开始记录新数据;如果不存在则新建文件。需要注意的是在这种状态下不能进行任何读取动作[^2]. - **追加模式 (`'a'`)** 类似于 `'w'`, 不同之处在于它不会删除现有内容而是继续在其末尾添加新的条目。同样不允许在此期间做任何形式上的检索工作. - **更新模式 (`'+'`)** 当加上这个符号后(如'r+', 'w+', 或者'a+'),意味着可以在同一个进程中既读又。不过要注意到混合使用这两种行为可能会带来意想不到的结果除非完全理解其机制. #### 进阶模式组合 - 将上述任一字母后面紧跟一个小字母'b'(binary), 表明将以二进制形式而非默认ASCII码表里的字符集来进行I/O传输过程. - **文本模式 ('t')** (默认选项) - 对应地,'t'表示按照平台特定的新行转换规则处理字符串. 下面给出一段简单的代码示例展示了几种常见情况: ```python with open('example.txt', mode='rt', encoding='utf-8') as file: content = file.read() print(content) with open('output.bin', mode='wb') as binary_file: binary_file.write(b'\x00\xFF') with open('log.txt', mode='at', encoding='ascii') as log_file: log_file.write("Another line of text\n") with open('mixed_mode.dat', mode='rb+') as mixed_file: data = mixed_file.read() # Read existing contents mixed_file.seek(0) # Move back to the start mixed_file.write(b'Some new bytes') # Overwrite at beginning ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

㤅uu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值