python-文件的操作全总结

本文详细介绍了Python中文件操作的核心API,包括open函数的用法、os模块的文件和目录管理、shutil模块的高级文件操作,以及glob模块的通配符文件查找。
摘要由CSDN通过智能技术生成

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 模块函数

  1. shutil.copy(src, dst, *, follow_symlinks=True):

    • 用于复制文件。将源文件 src 复制到目标文件或目录 dst。如果 dst 是目录,则文件将复制到该目录中。
    • follow_symlinks=True 表示在复制符号链接时,会复制链接指向的实际文件而不是链接本身。

    import shutil

    shutil.copy('source.txt', 'destination.txt')
     

  2. shutil.copy2(src, dst, *, follow_symlinks=True):

    • 类似于 shutil.copy(),但还尝试保留文件元数据(如文件权限和时间戳)。 

    import shutil

    shutil.copy('source.txt', 'destination.txt')

  3. shutil.move(src, dst, copy_function=copy2):

    • 用于移动文件或目录,也可以用于文件的改名。
    • 如果 dst 是目录,则将 src 移动到该目录中;如果 dst 是文件,则将 src 移动并改名为 dst
    • 默认情况下,它使用 copy2 函数来复制文件,以尽可能地保留文件的元数据。

     shutil.move('old_name.txt', 'new_name.txt')

  4. shutil.rmtree(path, ignore_errors=False, onerror=None):

    • 用于递归地删除目录以及目录下的所有文件和子目录。

    shutil.rmtree('directory_to_delete')

  5. shutil.make_archive(base_name, format, root_dir=None, base_dir=None):

    • 用于创建压缩文件(如zip、tar等)。

    shutil.make_archive('archive', 'zip', 'directory_to_compress')

  6. shutil.unpack_archive(filename, extract_dir=None, format=None):

    • 用于解压缩文件。

    shutil.unpack_archive('archive.zip', 'extracted_directory')

  7. 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模块:

        该模块支持使用通配符来查找文件。常用的函数:

  1. 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) # 输出匹配到的文件路径

  2. glob.escape(s):

    • 用于转义字符串中的特殊字符,使其不被当作通配符处理。

    import glob

    # 获取所有包含 [pattern] 字符的文件列表,而不是作为通配符处理
    files = glob.glob(glob.escape('[pattern]'))
     

  3. 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

b 模式用于处理二进制文件,例如图像、音频等。,可以与其他模式一起使用,如 'rb''wb'

r以只读模式打开文件,并将文件指针指向文件头;如果文件不存在会报错
++ 模式用于打开文件进行读写操作。可以与其他模式一起使用,如 'r+'(在r的基础上增加可写功能'w+'(在w的基础上增加可读功能'a+'(在a的基础上增加可读功能
xx 模式用于创建新文件,如果文件已经存在则引发 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()
 

  • 13
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值