python基础(十二)文件处理
python基础(十二)文件处理
1、文件处理
1.1、打开文件
1. 说明
在Python中打开文件使用open函数, 可以打开一个已经存在的文件, 如果改名称文件不存在则创建一个新文件。
2. 语法说明
open('文件名称','打开模式', encoding='编码格式')
3. 示例
# 打开
a = open("a.txt", 'a', encoding='utf-8')
4. 打开模式
| 模式 | 描述 |
|---|---|
| r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
| rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。 |
| r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
| rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。 |
| w | 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
| wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 |
| w+ | 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
| wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 |
| a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
| ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
| a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
| ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
1.2、读取文件
1. 说明
通过open打开文件后,根据打开的模式,可以对文件进行读操作。需要r的模式。
2. 语法说明
- read() 每次读取整个文件,它通常将读取到底文件内容放到一个字符串变量中,也就是说 read() 生成文件内容是一个字符串类型。
- readline()每只读取文件的一行,通常也是读取到的一行内容放到一个字符串变量中,返回str类型。
- 可以指定读取的字符长度
- 假如指定长度小于第一行,则返回第一行全部内容
- 指定长度多于第一行,但少于第二行结尾,则返回前两行
- readlines()每次按行读取整个文件内容,将读取到的内容放到一个列表中,返回list类型。
文件对象.read([最多读取字节数])
文件对象.readline([最多读取字节数])
文件对象.readlines()
3. 示例
# 打开
a = open("a.txt", 'rb')
# 读取数据全部
# 如果以字节读取需要解码
print(a.read().decode('utf-8'))
# 正常读取的话就直接read()即可
# print(a.read())
# 关闭文件
a.close()
4. 注意
文件指针问题:
打开文件后文件指针默认指向文件开头,之后随着读文件的操作移动到读文件操作的结束位置
读取起始位置:
文件指针指向的位置
1.3、写文件
1. 说明
通过open打开文件后,根据打开的模式,可以对文件进行写操作。需要w或a的模式。
2. 语法说明
文件对象.write(写入内容)
3. 示例
# 打开
a = open("a.txt", 'r', encoding='utf-8')
# 写入数据
a.write('hello,的')
# 关闭文件
a.close()
4. 注意
w与a的区别是:
w会对源文件进行覆盖,而a是进行追加
b是指:
以二进制字节进行写入。一般用于图片视频等文件的读写。
1.4、with
1. 说明
在with 中的代码块在执行的过程中发生任何情况,关联的对象资源最终都会被关闭。如果代码块在执行的过程中发生了一个异常,那么在这个异常被抛出前,程序会先将被打开的资源关闭。
2. 语法
with open(文件地址) as 文件名:
代码块
3. 示例
with open("a.txt", 'r', encoding='utf-8') as a:
print(a.read())
2、文件定位
2.1、tell()
1. 说明
返回当前文件指针在文件中的位置。
2. 注意
tell返回的是字节数,在gbk中汉字占两字节,utf中是三字节
3. 示例
with open("a.txt", 'r', encoding='utf-8') as a:
print(a.read(2)) # 中文
print(a.tell()) # 6
2.2、truncate()
1. 说明
用于截断文件
2. 注意
- truncate(字符长度)
- 因为gbk中汉字占两字节,utf中是三字节 所以如:以utf加载 数值需要被3整除
- 需要模式为r+或rd+
- 截断操作会直接影响源文件
- 需要文件指针在文件开头位置
3. 示例
with open("a.txt", 'r+', encoding='utf-8') as a:
a.truncate(2)
print(a.read())
2.3、seek()
1. 说明
移动文件指针到指定位置
2. 语法
seek() 方法语法如下:
fileObject.seek(offset[, whence])
- offset -- 开始的偏移量,也就是代表需要移动偏移的字节数,正数是向前,负数是向后
- whence:可选,默认值为 0。给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起
3. 注意
seek的移动长度,因为gbk中汉字占两字节,utf中是三字节 所以如:以utf加载 数值需要被3整除
如果没有以二进制的模式打开文件,那么seek只支持从文件开头开始算。
4. 示例
with open("a.txt", 'rb') as a:
print(a.read(6).decode('utf-8')) # 啊实
# 移到回到开始位置 a.seek(-6,1)一个效果
a.seek(0,0)
print(a.read(6).decode('utf-8')) # 啊实
3、小结
- 文件读写
- 文件指针定位

浙公网安备 33010602011771号