本文知识点思维导图
文件是什么?
开始之前,我们先来了解一下文件是什么。
文件是以计算机硬盘为载体存储在计算机上的信息集合,文件可以是文本文档、图片、程序等等。计算机文件基本上分为二种:二进制文件(没有统一的字符编码)和纯文本文件(有统一的编码,可以被看做存储在磁盘上的长字符串)。
IO操作文件步骤
文件类型
那么文件类型都有哪些呢
纯文本编码格式文件
- 定义:纯文本文件是以文本形式存储的文件,其中包含了人类可读的字符。
- 编码格式:常见的编码格式有
ASCII
、ISO-8859-1
、GB2312
、GBK
、UTF-8
、UTF-16
等。在Python中,通常使用UTF-8
编码来处理文本文件,因为它支持多种语言的字符集。 - 特点:易于阅读和编辑,适用于存储文本数据,如程序代码、文章、日志等。
二进制文件
- 定义:二进制文件是以二进制形式存储的文件,其中包含了机器可读的字节序列。
- 特点:无法直接通过文本编辑器查看其内容,适用于存储非文本数据,如图片、音频、视频、可执行文件等。
- 处理:在Python中,使用二进制模式(如'rb'、'wb')来打开和处理二进制文件。
文件操作和模式
文件的读写模式
mode | 解释 |
---|---|
r | 只读【默认模式,文件必须存在,不存在则抛出异常】 |
w | 只写,写之前会清空文件的内容,如果文件不存在,会创建新文件 |
a | 追加的方式,在原本内容中继续写,如果文件不存在,则会创建新文件 |
r+ | 可读可写 |
w+ | 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
rb | 二进制只读,与r类似,但用于二进制文件 |
wb | 二进制只写,与w类似,但用于二进制文件 |
ab | 二进制追加,与a类似,但用于二进制文件 |
rb+ | 二进制可读可写,与r+类似,但用于二进制文件 |
wb+ | 二进制打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件(与w+类似,但用于二进制文件) |
ab+ | 二进制打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写(与a+类似,但用于二进制文件) |
文件的操作
操作类型 | 方法/函数 | 描述 | 示例 |
---|---|---|---|
打开文件 | open(file, mode='r', ...) |
返回文件对象,用于读取或写入文件 | file = open('example.txt', 'r') |
读取文件内容 | read(size=-1) |
读取整个文件内容 | content = file.read() |
readline(size=-1) |
读取一行内容 | line = file.readline() |
|
readlines(hint=-1) |
读取所有行并返回一个列表 | lines = file.readlines() |
|
写入文件内容 | write(string) |
将字符串写入文件 | file.write('Hello, World!\n') |
关闭文件 | close() |
关闭文件,释放资源 | file.close() |
文件指针操作 | seek(offset, whence=0) |
移动文件指针到指定位置 | file.seek(0) |
tell() |
返回文件指针当前位置 | position = file.tell() |
|
上下文管理 | with open(...) as file |
使用上下文管理器自动管理文件打开和关闭 | with open('example.txt', 'r') as file: ... |
二进制模式 | open(file, 'rb') |
以二进制读模式打开文件 | with open('image.png', 'rb') as file: ... |
open(file, 'wb') |
以二进制写模式打开文件 | with open('output.bin', 'wb') as file: ... |
打开文件
使用open函数可以打开一个文件,并返回一个文件对象。基本语法如下:
file_object = open(file_path, mode='r', encoding=None, errors=None, newline=None, closefd=True, opener=None)
- file_path:文件路径,可以是相对路径或绝对路径。
- mode:模式字符串,决定了文件是以什么方式打开的。常用的模式有:
- 'r':只读模式(默认)。
- 'w':写入模式,会覆盖文件内容。
- 'a':追加模式,在文件末尾添加内容。
- 'b':二进制模式,可以与其他模式组合使用,如'rb'、'wb'等。
- '+':更新模式,可以读取和写入,如'r+'、'w+'、'a+'。
- encoding:指定文件的编码方式,默认为None(系统默认编码,通常是UTF-8)。
- errors:指定如何处理编码和解码错误。
- newline:控制换行符的行为。
- closefd:如果为False,则文件描述符不会关闭。
- opener:一个自定义的开文件器,通常不使用。
文件对象的常用方法
文件对象提供了多种方法来读取、写入和操作文件。
读取文件
- read(size=-1):读取整个文件内容,如果指定size,则读取指定数量的字符。
- readline(size=-1):读取一行内容,如果指定size,则读取指定数量的字符或到行结束。
- readlines(hint=-1):读取文件中的所有行,并返回一个包含每行作为元素的列表。如果指定hint,则读取大约那么多字节的内容。
with open('example.txt', 'r') as file:
content = file.read()
print(content)
写入文件
- write(string):将字符串写入文件。
- writelines(lines):将字符串列表写入文件。不会自动添加换行符,需要手动添加。
with open('example.txt', 'w') as file:
file.write('Hello, World!\n')
file.writelines(['This is a line.\n', 'This is another line.\n'])
文件指针操作
- seek(offset, whence=0):改变当前文件操作指针的位置。whence可以是0(文件开头)、1(当前位置)、2(文件末尾)。
- tell():返回当前文件操作指针的位置。
- flush():刷新内部缓冲区,将缓冲的数据立即写入文件。
with open('example.txt', 'r+') as file:
content = file.read(5) # 读取前5个字符
print(content)
file.seek(0) # 将文件指针移回文件开头
file.write('Hi ') # 覆盖前5个字符
file.flush() # 刷新缓冲区,确保数据写入文件
关闭文件
文件对象可以使用close()方法手动关闭,但更好的方式是使用with语句,这样文件会在块结束时自动关闭。
with open('example.txt', 'r') as file:
content = file.read()
# 文件在这里会自动关闭
二进制文件的操作
对于二进制文件,使用'rb'、'wb'等模式打开文件。
# 写入二进制文件
with open('example.bin', 'wb') as file:
file.write(b'\x00\x01\x02\x03\x04')
# 读取二进制文件
with open('example.bin', 'rb') as file:
content = file.read()
print(content) # 输出: b'\x00\x01\x02\x03\x04'
使用os和pathlib模块进行文件和目录操作
Python还提供了os和pathlib模块来进行文件和目录的操作,如创建目录、删除文件、重命名文件等。
- os模块:提供了许多与操作系统交互的函数。
- pathlib模块:提供了面向对象的路径操作方法。
import os
# 创建目录
os.makedirs('new_directory', exist_ok=True)
# 删除文件
os.remove('example.txt')
# 重命名文件
os.rename('old_name.txt', 'new_name.txt')
# 列出目录内容
print(os.listdir('.'))
使用pathlib:
from pathlib import Path
# 创建路径对象
path = Path('example.txt')
# 检查文件是否存在
if path.exists():
print('File exists.')
# 创建目录
Path('new_directory').mkdir(parents=True, exist_ok=True)
# 读取文件内容
content = path.read_text()
print(content)