1.pyhon文件操作API(文件操作函数)
在Python中,文件操作的主要API是通过内置的 open
函数和文件对象提供的方法来完成的。以下是一些常用的文件操作API:
open
函数:
-
用于打开文件并返回一个文件对象。
-
语法:
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
-
-
file (必填):
- 这是要打开或创建的文件的名称
-
mode(可填):
-
读取模式,默认值:r。通过读取模式来定义对文件读取方式。
-
-
buffering(可选,默认为 -1):
-
缓冲区大小:-1 表示使用系统默认的缓冲策略,0 表示无缓冲,>0 表示使用指定的缓冲大小。
-
-
encoding (可选,默认为 None):
- 用于指定编码方式,如 'utf-8'。如果为 None,则使用系统默认的编码方式。
-
errors (可选,默认为 None):
-
用于指定如何处理编码和解码错误。如果为 'strict',则引发错误;如果为 'replace' 或 'ignore',则分别替换或忽略错误;如果为特定的错误处理函数,则使用该函数处理错误
-
-
newline (可选,默认为 None):
- 用于指定换行符的形式。如果为 None,则使用系统默认的换行符形式;如果为 '',则不进行任何处理;如果为 '\n'、'\r' 或 '\r\n',则分别使用相应的换行符形式。
-
closefd (可选,默认为 True):
- 如果为 True,则在关闭文件时关闭文件描述符。如果为 False,则在关闭文件时保持文件描述符打开。
-
opener (可选):
- 一个自定义的打开器函数,该函数应该接受一个路径名并返回一个打开的文件描述符。这是一个非常高级的选项,通常不需要使用。
-
例:
file = open("example.txt", "r") # 以只读模式打开名为"example.txt"的文件
content = file.read() # 读取文件内容并存入变量中
print(content) # 输出文件内容
file.close() # 关闭文件
os模块:
该模块包含了与操作系统交互相关的功能,其中也有处理文件路径和目录的函数。常用函数如下:
1.os.getcwd(): 获取当前工作目录的路径。
import os
print(os.getcwd())
2.os.chdir(path): 改变当前工作目录到指定的路径。
import os
os.chdir('/home/user')
3.os.listdir(path): 列出指定路径下的所有文件和文件夹。
import os
print(os.listdir('/home/user'))
4.os.remove(filename): 删除指定的文件。
import os
os.remove('example.txt')
5.os.mkdir(dirname): 创建一个新的文件夹。
import os
os.mkdir('new_folder')
6.os.rmdir(dirname): 删除一个空文件夹。
import os
os.rmdir('new_folder')
7.os.rename(src, dst): 重命名文件。
pythonimport os
os.rename('old_name.txt', 'new_name.txt')
8.os.stat(filename): 获取指定文件的状态信息。它返回一个包含文件状态信息的对象,这个对象包含了文件的各种属性,比如文件大小、创建时间、修改时间等。这个函数使用文件名作为参数,返回一个包含文件状态信息的命名元组(named tuple)。
具体而言,os.stat(filename)
返回的对象是一个 os.stat_result
类型的命名元组,其中包含了以下信息:
st_mode
: 文件的模式,表示文件的类型和权限。st_ino
: 文件的 inode 号,用于唯一标识文件。st_dev
: 文件所在设备的标识号。st_nlink
: 文件的硬链接数量。st_uid
: 文件所有者的用户 ID。st_gid
: 文件所有者的组 ID。st_size
: 文件大小,以字节为单位。st_atime
: 文件的最后访问时间。st_mtime
: 文件的最后修改时间。st_ctime
: 文件的创建时间。
你可以使用这些属性来获取文件的各种信息,例如:
import os
filename = 'example.txt'
file_stat = os.stat(filename)
print(f"File Size: {file_stat.st_size} bytes")
print(f"Last Access Time: {file_stat.st_atime}")
print(f"Last Modification Time: {file_stat.st_mtime}")
9.os.chmod(filename, mode): 改变指定文件的权限。mode参数是一个表示权限的整数,例如0o755表示所有者有读/写/执行权限,组有读/执行权限,其他人有读/执行权限。注意权限表示的整数前应有0o前缀。
pythonimport os
os.chmod('example.txt', mode)
模式(mode)是一个三位数,表示所要设置的文件模式位。其中每一位表示不同的权限:
- 1 代表可执行权限。
- 2 代表可写权限。
- 4 代表可读权限。
因此,下面是几种常用的 os.chmod() 参数模式(mode):
- 0o755:所有者可执行,所有者、组和其他用户可读写。
- 0o750:所有者可执行,所有者和组可读写。
- 0o600:所有者可读写。
shutil模块:
该模块提供了高级的文件操作工具,比如复制、移动、重命名等
以下是一些常用的 shutil
模块函数
-
shutil.copy(src, dst, *, follow_symlinks=True)
:- 用于复制文件。将源文件
src
复制到目标文件或目录dst
。如果dst
是目录,则文件将复制到该目录中。 follow_symlinks=True
表示在复制符号链接时,会复制链接指向的实际文件而不是链接本身。
import shutil
shutil.copy('source.txt', 'destination.txt')
- 用于复制文件。将源文件
-
shutil.copy2(src, dst, *, follow_symlinks=True)
:- 类似于
shutil.copy()
,但还尝试保留文件元数据(如文件权限和时间戳)。
import shutil
shutil.copy('source.txt', 'destination.txt')
- 类似于
-
shutil.move(src, dst, copy_function=copy2)
:- 用于移动文件或目录,也可以用于文件的改名。
- 如果
dst
是目录,则将src
移动到该目录中;如果dst
是文件,则将src
移动并改名为dst
。 - 默认情况下,它使用
copy2
函数来复制文件,以尽可能地保留文件的元数据。
shutil.move('old_name.txt', 'new_name.txt')
-
shutil.rmtree(path, ignore_errors=False, onerror=None)
:- 用于递归地删除目录以及目录下的所有文件和子目录。
shutil.rmtree('directory_to_delete')
-
shutil.make_archive(base_name, format, root_dir=None, base_dir=None)
:- 用于创建压缩文件(如zip、tar等)。
shutil.make_archive('archive', 'zip', 'directory_to_compress')
-
shutil.unpack_archive(filename, extract_dir=None, format=None)
:- 用于解压缩文件。
shutil.unpack_archive('archive.zip', 'extracted_directory')
-
shutil.disk_usage(path)
:- 返回指定路径下的磁盘使用情况,包括总容量、已使用容量和可用容量。
import shutil
usage = shutil.disk_usage('/')
print(f"Total: {usage.total} bytes, Used: {usage.used} bytes, Free: {usage.free} bytes")
glob模块:
该模块支持使用通配符来查找文件。常用的函数:
-
glob.glob(pathname, recursive=False)
:- 用于返回符合指定模式(通配符)的所有文件和目录的列表。
pathname
参数是一个字符串,可以包含通配符*
(匹配0个或多个字符)和?
(匹配一个字符)。- 如果设置
recursive=True
,则会递归地搜索子目录。
import glob
pattern = "/home/user/*.txt"
matched_files = glob.glob(pattern) # 返回匹配指定模式的文件列表
for file in matched_files:
print(file) # 输出匹配到的文件路径 -
glob.escape(s)
:- 用于转义字符串中的特殊字符,使其不被当作通配符处理。
import glob
# 获取所有包含 [pattern] 字符的文件列表,而不是作为通配符处理
files = glob.glob(glob.escape('[pattern]'))
-
glob.escape(s)
:- 从字符串中提取文件名的基本名称(不包含路径)。
import glob
# 获取所有文件的基本名称列表
filenames = [glob.os.path.basename(file) for file in glob.glob('/path/to/files/*')]
2.基本操作
(1)打开文件: 使用 open
函数来打开文件,它接受文件路径和打开模式作为参数。例如,要打开一个文本文件进行读取
例:
file_path = 'example.txt'
with open(file_path, 'r') as file:
# 在这里执行文件操作,这里的 'r'
表示读取模式。如果需要写入文件,可以使用 'w'
模式,如果希望在文件末尾追加内容,可以使用 'a'
模式。
(2)读取文件内容: 有几种方法可以读取文件内容,其中最常见的是使用 read
方法
例:
with open(file_path, 'r') as file:
content = file.read()
print(content)
如果你希望按行读取文件内容,可以使用 readline
方法,或者使用 readlines
方法获取所有行的列表。
(3)写入文件: 如果要将数据写入文件,可以使用write方法:
with open('output.txt', 'w') as file:
file.write('Hello, world!')
#如果使用 'a'
模式打开文件,则会在文件末尾追加内容。
读写模式:
模式 | 含义 |
a | 在文件末尾追加内容,如果文件不存在则创建 |
b |
|
r | 以只读模式打开文件,并将文件指针指向文件头;如果文件不存在会报错 |
+ | + 模式用于打开文件进行读写操作。可以与其他模式一起使用,如 'r+'( 在r的基础上增加可写功能) 、'w+'( 在w的基础上增加可读功能) 、'a+'( 在a的基础上增加可读功能) 。 |
x | x 模式用于创建新文件,如果文件已经存在则引发 FileExistsError |
(4)迭代文件内容: 你还可以使用 for
循环逐行迭代文件内容:
with open(file_path, 'r') as file:
for line in file:
print(line)
(5)关闭文件: 使用 with
语句可以确保在文件使用完毕后自动关闭文件。如果不使用 with
,确保在文件操作结束后调用 close
方法关闭文件:
file = open(file_path, 'r')
# 执行文件操作
file.close()