#创作灵感#
- 搬运自己的原创文章到这
- 写技术笔记巩固知识要点
1. 文件的编码
UTF-8是目前全球通用的编码格式
除非有特殊需求,否则,一律以UTF-8格式进行文件编码即可。
2. 文件的读取
2.1. 基本语法
在Python中,使用open函数,可以打开一个已经存在的文件,或者创建一个新文件,语法如下
open(name,mode,encoding)
name:是要打开的目标文件名的字符串(可以包含文件所在的具体位置)
mode:设置打开文件的模式(访问模式):只读、写入、追加等
encoding:编码格式
f = open('python.txt', 'r', encoding='utf-8')
# encoding的顺序不是第三位,所以不能用位置参数,用关键字参数直接指定
注意:此时的"f"是'open'函数的文件对象
2.2. mode常用的三种基础访问模式
模式 | 描述 |
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式 |
w | 打开一个文件只用于写入。 如果该文件已存在则打开文件,并从开头开始编辑,原有内容会被删除。 如果文件不存在,创建新文件 |
a | 打开一个文件用于追加。 如果该文件已存在,新的内容将会被写入到已有内容之后。 如果文件不存在,创建新文件进行写入 |
2.3. 读操作相关方法
假设已经有了一个文件对象 f,有一个txt文件(如下)
hello world
abcdefg
aaa
bbb
2.3.1. read()方法
f.read(num)
num表示要从文件中读取的数据的长度(单位是字节),如果没有传入num,那么就表示读取文件所有的数据
with open("python.txt") as f:
print(f.read())
# 输出是
# hello world
# abcdefg
# aaa
# bbb
2.3.2. readlines()方法
readlines可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素。
f = open('python.txt')
content = f.readlines()
print(content)
f.close()
# 输出结果是
# ['hello world\n', 'abcdefg\n', 'aaa\n', 'bbb\n']
2.3.3. readline()方法
一次读取一行内容
f = open('python.txt')
content = f.readline()
print(f"第一行内容是: {content}")
content = f.readline()
print(f"第二行内容是: {content}")
f.close()
# 输出结果是
# 第一行内容是: hello world
#
# 第二行内容是: abcdefg
#
如上,一次读取一行内容。因为原文件中每一行是’\n‘结尾,所以输出每一行内容时还会换行
2.3.4. for循环读取文件行
for line in open('python.txt'):
print(line)
# 输出结果是
# hello world
#
# abcdefg
#
# aaa
#
# bbb
#
每一个line临时变量,就记录了文件的一行数据
2.3.5. close()关闭文件对象
这个代码就不展示了吧( f.close() )
如果不调用close,同时程序没有停止运行,那么这个文件就一直被Python程序占用
2.3.6. with open 语法
with open("python.txt") as f:
lines = f.readlines()
print(lines)
# 输出是
# ['hello world\n', 'abcdefg\n', 'aaa\n', 'bbb\n']
这种用法可以在操作完成之后自动关闭close文件,避免遗忘掉close方法
3. 文件的写入
3.1. 写操作快速入门
# 1.打开文件
f = open("python.txt", 'w')
# 2.文件写入
f.write("hello")
# 3.内容刷新
f.flush()
注意:
- 直接调用write,内容并未真正写入文件,而是会积攒在程序的内存里,称之为缓冲区
- 当调用flush的时候,内容会真正写入文件
- 这样做是避免频繁的操作硬盘,导致效率下降(攒一堆,一次性写磁盘,我靠!!)
- close()方法,带有flush()方法的功能
使用'w'模式时,如果: | 那么会: |
文件存在 | 会将原有内容清空 |
文件不存在 | 创建新文件 |
4. 文件的追加
4.1. 追加写入操作快速入门
# 1.打开文件,通过'a'模式打开即可
f = open("python.txt", 'a')
# 2.文件写入
f.write("\ni love you")
# 3.内容刷新
f.flush()
使用'a'模式时,如果: | 那么会: |
文件存在 | 追加写入文件 |
文件不存在 | 创建新文件 |