Python open()内置函数 --读写txt文件

在windows系统上使用 open() 内置函数读写txt文件

环境

windows10
python3.8.6
VSCode

windows路径

windows系统里,常用斜杠 \ 来表示绝对路径, 反斜杠 / 来表示相对路径

绝对路径

绝对路径 指从 盘符 开始的路径,比如 C:\Users\yu\11.txt

斜杠 \ 在python中是转义字符,windows系统的绝对路径需要做处理

1
2
3
4
5
# 使用 \\ 代替 \
'C:\\a\\b\\c\\11.txt'

# 引号前加上字母 r
r'C:\a\b\c\11.txt'

相对路径

相对路径相对于当前(打开的)文件夹 的路径,使用两个特殊符号点 . 和双点 ..

. 表示当前目录

双点 .. 表示当前目录的上一级目录

假设雨园文件夹 下有两个路径

/雨园文件夹/博客文件夹/文档.txt
/雨园文件夹/main.py

如果打开了 main.py 文件,那么当前目录是 雨园文件夹

main.py 文件和 博客文件夹 都在 雨园文件夹

# 雨园文件夹 相对路径
./
# 博客文件夹 相对路径
./博客文件夹/
# 文档.txt 相对路径
./博客文件夹/文档.txt

文件夹的相对路径以 / 结尾,文件的路径以文件的 后缀名 结尾

读取文件

打开文件 > 读取文件 > 关闭文件

桌面创建一个名为 python 的文件夹,里面有一个文件 abc.txt ,其内容为

雨园博客
1314
520

使用 VSCode 打开 python ,然后新建一个 open.py 文件,代码如下

1
2
3
4
5
6
7
8
9
10
11
12
# 文件路径,与py文件在同一个目录下
path = './abc.txt'
# 以读取方式打开文件
data = open(path, 'r', encoding='utf-8')
# 一次性读取文件内容并打印出来
print(data.read())
# 关闭文件,必须项
data.close()

# 雨园博客
# 1314
# 520

变量 data 用于存放读取的文件数据,以供下一步操作

函数 open 有三个参数:

第0个参数 ./abc.txt 是文件路径,可以是绝对路径,也可以是相对路径
第1个参数 r 表示以 只读 的模式打开了文件,其它还有 w(只写) a(只追加)
第2个参数 encoding 决定数据的编码方式

read() 方法会一次性读取文件,不要用于读取大文件,其它还有 readline()readlines()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 文件路径,与py文件在同一个目录下
path = './abc.txt'

data1 = open(path, 'r', encoding='utf-8')
print(data1.readline()) # 返回一行,括号内可输入数字
'''输出
雨园博客

'''

# 关闭文件
data1.close()


data2 = open(path, 'r', encoding='utf-8')
print(data2.readlines()) # 返回列表,括号内可输入数字
'''输出
['雨园博客\n', '1314\n', '520']
'''

# 关闭文件
data2.close()

\n 表示换行符

.close() 方法是关闭文件,这是必须项,原因有两个

1.计算机能打开的文件数量是有限制的,open()过多而不close()的话,就不能再打开文件了
2.保证写入的内容已经在文件里被保存好了

文件关闭之后就不能再对这个文件进行读写了,如果还需要读写这个文件,就要再次 open() 打开这个文件

写入文件

打开文件 > 写入文件 > 关闭文件

abc.txt 文件写入文本

open.py 代码如下

1
2
3
4
5
6
7
8
9
10
# 文件路径,与py文件在同一个目录下
path = './abc.txt'
# 如果文件不存在则自动创建
data = open(path, 'w', encoding='utf-8')
data.write('博客\n')
data.write('1314520\n')
data.writelines(['雨园博客', '1314', '520\n'])
data.writelines(('雨园博客', '1314', '520'))
# 关闭文件,必须项
data.close()

此时 abc.txt 文件内容被替换为

博客
1314520
雨园博客1314520
雨园博客1314520

write() 括号内的参数只能写入字符串

writelines() 括号内的参数可以是序列(字符串/列表/元组)

w 模式会清空 abc.txt 文件原来的数据,然后写入新文件,如果只是追加内容,可以换成 a 模式

with关键字

为了避免打开文件后忘记关闭或者打开文件时出现异常(目录或文件不存在),可以使用 with 关键字

写入文件代码可以改成

1
2
3
4
5
6
7
# 文件路径,与py文件在同一个目录下
path = './abc.txt'
with open(path, 'w', encoding='utf-8') as data:
data.write('博客\n')
data.write('1314520\n')
data.writelines(['雨园博客', '1314', '520\n'])
data.writelines(('雨园博客', '1314', '520'))

文件模式

r: 读取模式
w: 写入模式,该模式会清除原有数据后重新写入
a: 追加模式,在原有数据上写入

这三种模式适用于读写 文本

图片、音频是使用二进制格式保存的,那么在读取它们时至少使用 rbwbab 模式

38