六 Python的文件系统
6.1 打开文件
在Python中,可以使用内置的open函数来打开文件,open函数的基本语法如下:
file = open(file_name, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
参数说明:
file_name (必需):要打开的文件名或路径。
mode (可选,默认为 'r'):文件打开模式。常见的模式有:
'r':只读模式(默认)。
'w':只写模式,如果文件已存在则会被覆盖。
'x':创建文件并写入,如果文件已存在则会产生异常。
'a':追加模式,如果文件已存在则在文件末尾追加内容。
'b':二进制模式(可以与上述模式组合,如 'rb' 或 'wb')。
't':文本模式(默认,通常不需要明确指定)。
'+':表示可以同时读写文件(如 'r+'、'w+'、'a+')。
buffering (可选,默认为 -1):设置缓冲策略。
0 表示无缓冲(仅用于二进制模式)。
1 表示行缓冲(仅用于文本模式)。
大于 1 的值表示缓冲区大小(以字节为单位)。
-1 表示默认缓冲策略。
encoding (可选,用于文本模式):设置文件编码方式,如 'utf-8'。
errors (可选,用于文本模式):设置编码错误的处理方式,如 'ignore'、'replace' 等。
newline (可选,用于文本模式):控制跨平台的新行符。可以是 None、'\n'、'\r'、'\r\n' 或其他任何字符串。
closefd (可选,仅当文件描述符由 opener 提供时有用):如果为 True,则在文件对象被关闭时,底层文件描述符也会被关闭。默认为 True。
opener (可选):一个可调用对象,用于打开文件描述符,如 os.open()。
6.2 关闭文件
使用完文件后,应该及时关闭以释放资源。
文件使用结束后采用close()方法关闭,关闭格式:
变量名.close()
6.3 文件读取
当文件被打开后,按照打开方式的不同对文件进行相应的读写操作,如果文件用文本文件方式打开,读写按照字符串方式进行操作,使用当前计算机使用的编码或指定编码。
如果用二进制的方式打开,读写按照字节流方式操作。
1. read(size)
read(size)方法从文件中读取指定数量的字节(或字符,在文本模式下)并返回。如果指定了size参数,则读取指定数量的字节或字符;如果没有指定size或size为负值,则读取并返回整个文件。
示例:
python
with open('example.txt', 'r') as file:
content = file.read(10) # 读取前10个字符
print(content)
2. readline()
readline()方法从文件中读取一行,包括行尾的换行符(\n)。如果文件已经读取到末尾,则返回空字符串。这个方法在需要逐行处理文件内容时非常有用。
示例:
python
with open('example.txt', 'r') as file:
line = file.readline() # 读取第一行
print(line, end='') # 输出第一行,并去除默认的换行符
# 逐行读取并打印文件内容
while True:
line = file.readline()
if not line: # 如果读取到空字符串,说明文件已读完
break
print(line, end='')
3. readlines()
readlines()方法读取文件中的所有行,并返回一个包含所有行(作为字符串列表)的列表。每一行都是一个字符串,包括末尾的换行符(\n)。如果文件很大,这个方法可能会占用大量内存,因为它会一次性读取整个文件。
示例:
python
with open('example.txt', 'r') as file:
lines = file.readlines() # 读取所有行到列表中
# 遍历列表并打印每一行
for line in lines:
print(line, end='')
6.4 文件写入
在Python中,文件写入操作通常涉及使用open()函数以写入模式(‘w’、‘a’、'x’等)打开一个文件,并使用文件对象的write()方法将内容写入文件。以下是关于文件写入的详细介绍:
写入模式
'w': 写入模式,如果文件已存在则会被覆盖,如果文件不存在则创建新文件。
'a': 追加模式,如果文件已存在,则在文件末尾追加内容;如果文件不存在,则创建新文件。
'x': 独占创建模式,如果文件已存在则会产生FileExistsError异常,如果文件不存在则创建新文件。
使用 write() 方法
write()方法用于将字符串写入文件。
python
with open('example.txt', 'w') as file: # 以写入模式打开文件
file.write('Hello, World!\n') # 写入字符串到文件
with open('example.txt', 'a') as file: # 以追加模式打开文件
file.write('This is an appended line.\n') # 在文件末尾追加内容
写入其他类型数据
如果需要将非字符串类型的数据(如整数、浮点数、列表等)写入文件,通常需要先将其转换为字符串格式。
python
with open('numbers.txt', 'w') as file:
file.write(str([1, 2, 3, 4, 5])) # 将列表转换为字符串并写入文件
注意事项
使用with语句可以确保文件在使用完毕后被正确关闭。
写入文件时,如果文件不存在,则会创建新文件;如果文件已存在且使用’w’模式,则会覆盖原有内容。
如果需要在文件末尾追加内容,应使用’a’模式。
6.5 文件系统其他api
Python的os和os.path模块提供了许多与文件系统交互的API,以下是一些常用的API:
os 模块
os.listdir(path): 列出指定目录下的文件和子目录名。
os.getcwd(): 返回当前工作目录。
os.chdir(path): 改变当前工作目录。
os.mkdir(path): 创建新目录。
os.rmdir(path): 删除空目录。
os.remove(path): 删除文件。
os.rename(old_path, new_path): 重命名文件或目录。
os.path.exists(path): 检查路径是否存在。
os.path.isfile(path): 检查路径是否为文件。
os.path.isdir(path): 检查路径是否为目录。
os.path.getsize(path): 获取文件大小(以字节为单位)。
os.path 模块
os.path模块提供了许多用于处理文件路径的实用函数。
os.path.abspath(path): 返回指定文件的绝对路径。
os.path.basename(path): 返回路径中的文件名。
os.path.dirname(path): 返回路径中的目录名。
os.path.join(path, *paths): 将一个或多个路径组件连接成一个路径名。
os.path.split(path): 将路径拆分为目录名和文件名。
os.path.splitext(path): 将路径拆分为文件名和扩展名。
os.path.isabs(path): 判断路径是否为绝对路径。
os.path.getmtime(path): 返回文件或目录的最后修改时间。
os.path.getatime(path): 返回文件或目录的最后访问时间。
os.path.getctime(path): 返回文件或目录的创建时间(在某些系统上可能是最后修改时间)。
使用这些API可以方便地在Python中进行文件系统的操作。