python文件操作

06-13 1218阅读

文章目录

  • 一、文件概述
    • 1.1、文件类别
    • 1.2、文件路径
    • 1.3、文件的编码方式
    • 二、常规文件操作
      • 2.1、文件操作通用语句
      • 2.2、文件访问模式
      • 2.3、文本文件的读和写
      • 2.4、二进制文件的读和写
      • 三、CSV文件操作
        • 3.1、csv模块常用函数

          一、文件概述

          1.1、文件类别

          文件是存储在辅助存储器上的数据序列,可以包含任何数据内容,如文本、图像、音频、视频等,根据存储格式不同,文件可分为两种类型:文本文件和二进制文件。

          python文件操作
          (图片来源网络,侵删)

          文本文件

          文本文件一般由采用特定编码方式的字符组成,如UTF-8、ASCII、Unicode等,内容容易统一展示和阅读;大部分文本文件都可通过文本编辑软件或文字处理软件创建、修改和阅读。

          Windows记事本创建的.txt文件就是典型的文本文件,以.py为扩展名的python源文件、以.html为扩展名的网页文件等也都是文本文件。

          由于文本文件经过了编码,因此,它也可以被看作存储在磁盘上的长字符串;常见的文本编辑软件有记事本、Notepad++等。

          二进制文件

          二进制文件存储的是由0和1组成的二进制编码,文件内部数据的组织格式与文件用途有关;典型的二进制文件包括.bmp图片文件、.avi视频文件、各种计算机语言编译后生成的文件等。

          二进制文件和文本文件的主要区别在于是否有统一的字符编码,二进制文件由于没有统一字符编码,只能当作字节流,而不能看作字符串。

          1.2、文件路径

          文件有两个关键属性,分别是“文件名”和“文件路径”,其中,文件名指的是为每个文件设定的名称,对文件进行创建和访问时,都需要用到文件路径,也就是文件存储的位置或即将存储的位置。

          文件路径分为“相对路径”和“绝对路径”;相对路径相对于当前工作目录,即程序所在路径,也就是当前程序存储的位置,如果文件和程序存储在同一个文件夹中,那么创建或访问文件时,可以直接写文件名;绝对路径从根文件夹开始,Windows中以盘符作为根文件夹,而mac或Linux操作系统中以“/”作为根文件夹。

          python的os模块是基本操作系统功能模块,包括对文件的一些操作;其中os.path模块提供了一些函数,可以实现绝对路径和相对路径之间的转换,以及检查给定的路径是否为绝对路径。

          os.path模块功能:

          路径拼接和分割:

          • os.path.join(*paths) 函数能够将多个路径片段合并成一个完整的路径。这种合并考虑了不同操作系统的路径分隔符,可以确保在不同系统上生成正确的路径。例如,在Unix系统上使用此函数会生成以“/”分隔的路径,而在Windows上则生成以“\”分隔的路径。
          • os.path.split(path) 函数用于将路径分割成头部和尾部,分别对应目录名和文件名。这在提取特定部分的路径时非常有用,比如从一个完整的文件路径中仅提取文件名或目录名。

            路径和文件相关属性获取:

            • os.path.dirname(path) 和 os.path.basename(path) 分别用于获取路径的目录部分和文件名部分。这两个函数可以有效地从给定路径中提取所需信息,经常被用于文件操作中,比如在读取或写入文件之前确认文件的准确位置。
            • os.path.splitext(path) 函数能够分离文件路径中的文件名和扩展名。这对于需要根据文件类型(通过扩展名判断)进行不同操作的程序特别重要。

              检查文件存在性:

              • os.path.exists(path) 可以检查给定路径的文件或目录是否存在于文件系统中。这是在进行文件读写操作前的必要检查,以避免因文件不存在而导致的错误。

                获取绝对路径和相对路径:

                • os.path.abspath(path) 返回给定路径的绝对版本。这对于确保路径在所有环境下的一致性和正确性极为重要,特别是在脚本需要在不同的文件系统或操作系统之间移植时。
                • os.path.relpath(path, start) 返回从start到path的相对路径。这在构建相对路径时非常有用,使得路径配置更加灵活和可移植。

                  解析和构建路径:

                  • os.path.normpath(path) 将路径规范化,消除其中冗余的分隔符和上级目录引用(如“…”)。这有助于保持路径的清晰和标准化,避免因为路径格式不一致而引起的问题。
                  • os.path.realpath(path) 返回给定路径的真实路径,消除符号链接等导致的路径间接性。这对于确保指向实际物理位置的路径非常关键,尤其是在处理符号链接较多的Unix系统上。

                    os.path.join(*paths)

                    # 导入 os 模块,该模块提供了许多操作系统相关的函数和变量
                    import os
                    # 定义一个函数 create_directory,该函数用于创建一个目录
                    def create_directory(path_components, directory_name):
                        # 使用 os.path.join 函数将路径组件列表和目录名称连接起来,生成一个完整的目录路径
                        # *path_components 语法将路径组件列表展开成多个参数
                        directory_path = os.path.join(*path_components, directory_name)
                        # 使用 os.makedirs 函数创建目录,exist_ok=True 参数表示如果目录已经存在,不会抛出错误
                        os.makedirs(directory_path, exist_ok=True)
                        # 返回创建的目录路径
                        return directory_path
                    # 定义路径组件列表
                    path_components = ['usr', 'local']
                    # 定义目录名称
                    directory_name = 'my_directory'
                    # 调用 create_directory 函数,传递路径组件列表和目录名称作为参数
                    created_directory = create_directory(path_components, directory_name)
                    # 打印出创建的目录路径
                    print(f"创建的目录路径:{created_directory}")
                    

                    os.path.split(path)

                    # 导入 os 模块,该模块提供了许多操作系统相关的函数和变量
                    import os
                    # 定义一个函数 split_path,该函数用于将路径分解成目录部分和文件名部分
                    def split_path(path):
                        # 使用 os.path.split 函数将路径分解成目录部分和文件名部分
                        # os.path.split 函数将路径分解成两个部分:目录部分和文件名部分
                        # 它返回一个元组,第一个元素是目录部分,第二个元素是文件名部分
                        directory, filename = os.path.split(path)
                        # 返回目录部分和文件名部分的元组
                        return directory, filename
                    # 定义一个路径字符串
                    path = '/usr/local/bin/python.exe'
                    # 调用 split_path 函数,传递路径字符串作为参数
                    # 将返回值unpack到 directory 和 filename 变量中
                    directory, filename = split_path(path)
                    # 打印出目录部分
                    print(f"目录部分:{directory}")
                    # 打印出文件名部分
                    print(f"文件名部分:{filename}")
                    

                    os.path.dirname(path)

                    # 导入 os 模块,该模块提供了许多操作系统相关的函数和变量
                    import os
                    # 定义一个函数 get_directory,该函数用于获取路径的目录部分
                    def get_directory(path):
                        # 使用 os.path.dirname 函数获取路径的目录部分
                        # os.path.dirname 函数将路径分解成目录部分和文件名部分
                        # 它返回目录部分,everything except the last component of the path
                        directory = os.path.dirname(path)
                        # 返回目录部分
                        return directory
                    # 定义一个路径字符串
                    path = '/usr/local/bin/python.exe'
                    # 调用 get_directory 函数,传递路径字符串作为参数
                    # 将返回值赋值给 directory 变量
                    directory = get_directory(path)
                    # 打印出目录部分
                    print(f"目录部分:{directory}")
                    

                    os.path.basename(path)

                    # 导入 os 模块,该模块提供了许多操作系统相关的函数和变量
                    import os
                    # 定义一个函数 get_filename,该函数用于获取路径的文件名部分
                    def get_filename(path):
                        # 使用 os.path.basename 函数获取路径的文件名部分
                        # os.path.basename 函数将路径分解成目录部分和文件名部分
                        # 它返回文件名部分,即路径的最后一个组件
                        filename = os.path.basename(path)
                        # 返回文件名部分
                        return filename
                    # 定义一个路径字符串
                    path = '/usr/local/bin/python.exe'
                    # 调用 get_filename 函数,传递路径字符串作为参数
                    # 将返回值赋值给 filename 变量
                    filename = get_filename(path)
                    # 打印出文件名部分
                    print(f"文件名部分:{filename}")
                    

                    os.path.splitext(path)

                    # 导入 os 模块,该模块提供了许多操作系统相关的函数和变量
                    import os
                    # 定义一个函数 get_fileinfo,该函数用于获取路径的文件名和扩展名
                    def get_fileinfo(path):
                        # 使用 os.path.splitext 函数获取路径的文件名和扩展名
                        # os.path.splitext 函数将路径分解成文件名和扩展名两个部分
                        # 它返回一个元组,第一个元素是文件名,第二个元素是扩展名
                        filename, extension = os.path.splitext(path)
                        # 返回文件名和扩展名
                        return filename, extension
                    # 定义一个路径字符串
                    path = '/usr/local/bin/python.exe'
                    # 调用 get_fileinfo 函数,传递路径字符串作为参数
                    # 将返回值unpack到 filename 和 extension 变量中
                    filename, extension = get_fileinfo(path)
                    # 打印出文件名和扩展名
                    print(f"文件名:{filename}")
                    print(f"扩展名:{extension}")
                    

                    os.path.exists(path)

                    # 导入 os 模块,该模块提供了许多操作系统相关的函数和变量
                    import os
                    # 定义一个函数 check_file_exists,该函数用于检查文件是否存在
                    def check_file_exists(path):
                        # 使用 os.path.exists 函数检查文件是否存在
                        # os.path.exists 函数返回一个布尔值,表示文件是否存在
                        exists = os.path.exists(path)
                        # 如果文件存在,返回 True
                        if exists:
                            return True
                        # 否则,返回 False
                        else:
                            return False
                    # 定义一个路径字符串
                    path = '/usr/local/bin/python.exe'
                    # 调用 check_file_exists 函数,传递路径字符串作为参数
                    exists = check_file_exists(path)
                    # 打印出文件是否存在
                    if exists:
                        print(f"文件 {path} 存在")
                    else:
                        print(f"文件 {path} 不存在")
                    

                    os.path.abspath(path)

                    # 导入 os 模块,该模块提供了许多操作系统相关的函数和变量
                    import os
                    # 定义一个函数 get_absolute_path,该函数用于获取文件的绝对路径
                    def get_absolute_path(path):
                        # 使用 os.path.abspath 函数获取文件的绝对路径
                        # os.path.abspath 函数将相对路径转换为绝对路径
                        absolute_path = os.path.abspath(path)
                        # 返回绝对路径
                        return absolute_path
                    # 定义一个相对路径字符串
                    relative_path = 'python.exe'
                    # 调用 get_absolute_path 函数,传递相对路径字符串作为参数
                    absolute_path = get_absolute_path(relative_path)
                    # 打印出绝对路径
                    print(f"绝对路径:{absolute_path}")
                    

                    os.path.relpath(path, start)

                    # 导入 os 模块,该模块提供了许多操作系统相关的函数和变量
                    import os
                    # 定义一个函数 get_relative_path,该函数用于获取文件的相对路径
                    def get_relative_path(path, start):
                        # 使用 os.path.relpath 函数获取文件的相对路径
                        # os.path.relpath 函数将绝对路径转换为相对路径
                        relative_path = os.path.relpath(path, start)
                        # 返回相对路径
                        return relative_path
                    # 定义一个绝对路径字符串
                    absolute_path = '/usr/local/bin/python.exe'
                    # 定义一个起始路径字符串
                    start_path = '/usr/local/bin'
                    # 调用 get_relative_path 函数,传递绝对路径和起始路径作为参数
                    relative_path = get_relative_path(absolute_path, start_path)
                    # 打印出相对路径
                    print(f"相对路径:{relative_path}")
                    

                    os.path.normpath(path)

                    # 导入 os 模块,该模块提供了许多操作系统相关的函数和变量
                    import os
                    # 定义一个函数 normalize_path,该函数用于标准化文件路径
                    def normalize_path(path):
                        # 使用 os.path.normpath 函数标准化文件路径
                        # os.path.normpath 函数将路径标准化为规范形式
                        normalized_path = os.path.normpath(path)
                        # 返回标准化后的路径
                        return normalized_path
                    # 定义一个路径字符串
                    path = '/usr/local/bin/../python.exe'
                    # 调用 normalize_path 函数,传递路径字符串作为参数
                    normalized_path = normalize_path(path)
                    # 打印出标准化后的路径
                    print(f"标准化后的路径:{normalized_path}")
                    

                    os.path.realpath(path)

                    # 导入 os 模块,该模块提供了许多操作系统相关的函数和变量
                    import os
                    # 定义一个函数 get_real_path,该函数用于获取文件的真实路径
                    def get_real_path(path):
                        # 使用 os.path.realpath 函数获取文件的真实路径
                        # os.path.realpath 函数将 symbolic link 解析为真实路径
                        real_path = os.path.realpath(path)
                        # 返回真实路径
                        return real_path
                    # 定义一个路径字符串
                    path = '/usr/local/bin/python.exe'
                    # 调用 get_real_path 函数,传递路径字符串作为参数
                    real_path = get_real_path(path)
                    # 打印出真实路径
                    print(f"真实路径:{real_path}")
                    

                    1.3、文件的编码方式

                    在对文件进行操作前,还需要说明以下文件的编码方式,编码就是用数字来表示符号和文字,它是符号、文字存储和显示的基础。

                    ASCII编码方式

                    ASCII编码方式是一种基于拉丁字母的电脑编码系统,主要用于显示现代英语和其他西欧语言。ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)定义了128个字符的编码,这些包括大小写英文字母、数字和一些符号,以及控制字符如回车和换行等。每个字符在ASCII中都被分配了一个7位的二进制数,这使得它成为最早的电子文本编码标准之一。

                    GB2312编码方式

                    GB2312编码方式是一种针对简体中文的字符集编码标准。GB2312编码标准是中国大陆地区广泛使用的一种中文字符集编码,它是为了适应中文信息处理的需要,由全国信息技术标准化技术委员会在20世纪80年代制定的标准。这种编码方式不仅涵盖了简体中文字符,还包含了一定数量的其他符号,如拉丁字母和日文假名等,满足了当时社会对电脑处理中文的需求

                    GBK编码方式

                    GBK编码方式是一种扩展自GB2312的中文字符集编码标准,它兼容GB2312并在此基础上增加了更多的汉字和符号。这种编码方式在中文信息处理中扮演着重要角色,特别是在早期的中文计算机应用环境中。

                    Unicode编码方式

                    Unicode编码是一种全球字符编码标准,旨在为世界上所有的文字和符号提供一个统一且唯一的编码。Unicode由Unicode联盟开发和维护,该联盟是一个非盈利组织,成员包括主要的计算机公司和其他对字符编码感兴趣的机构。Unicode的目标是解决在多语言环境下不同编码系统之间的兼容性问题,促进全球信息的交换。

                    UTF-8编码方式

                    UTF-8编码是一种针对Unicode字符集设计的可变长度的字符编码标准。它使用一至四个字节来表示每个字符,能够覆盖Unicode字符集的所有字符。

                    二、常规文件操作

                    python对文件的操作通常按照以下3个步骤进行。

                    • 读写文件前需要请求操作系统打开一个文件对象(通常称为文件描述符)。
                    • 然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)。
                    • 最后关闭对象。

                      2.1、文件操作通用语句

                      使用open()函数打开或建立文件,返回一个file对象。

                      语法格式

                      fileobj = open(filename[,mode])
                      open(file_name[,access_mode] [,buffering] [,encoding])
                      
                      • filename:filename变量存储了待访问文件的名称。
                      • mode:mode决定了文件访问模式。
                      • buffering:如果buffering的值被设为0,就不会有寄存,如果buffering的值取1,访问文件时就会寄存,如果buffering的值设为大于1的整数,即为寄存区的大小,如果buffering取负值,寄存区的大小则为系统默认值。
                      • encoding:表示返回的数据采用何种编码方式
                        # 定义文件名
                        file_name = "example.txt"
                        # 尝试打开文件并读取内容
                        try:
                            # 使用with语句打开文件,确保文件在操作完成后自动关闭
                            with open(file_name, "r") as file:
                                # 读取文件内容
                                content = file.read()
                                # 打印提示信息
                                print("文件已存在,内容如下:")
                                # 打印文件内容
                                print(content)
                        # 如果文件不存在,捕获FileNotFoundError异常
                        except FileNotFoundError:
                            # 使用with语句创建新文件,并写入内容
                            with open(file_name, "w") as file:
                                # 写入内容
                                file.write("新创建的文件")
                                # 打印提示信息
                                print("文件不存在,已创建新文件并写入内容。")
                        

                        2.2、文件访问模式

                        模式描述
                        t文本模式(默认)
                        x写模式
                        b二进制模式
                        u通用换行模式
                        r以只读模式打开文件
                        rb以二进制格式打开一个文件用于只读
                        r+打开一个文件用于读写
                        rb+以二进制格式打开一个文件用于读写
                        w打开一个文件只用于写入
                        wb以二进制格式打开一个文件只用于写入
                        w+打开一个文件用于读写
                        wb+以二进制格式打开一个文件用于读写
                        a打开一个文件用于追加
                        ab以二进制格式打开一个文件用于追加
                        a+打开一个文件用于读写
                        ab+以二进制格式打开一个文件用于读写

                        2.3、文本文件的读和写

                        文本文件的读入

                        从文本文件的读入数据的步骤:打开文件、读取数据和关闭文件。

                        # 定义文件名
                        file_name = "myfile.txt"
                        # 尝试打开文件并读取内容
                        try:
                            # 使用with语句打开文件,确保文件在操作完成后自动关闭
                            with open(file_name, "r") as file:
                                # 读取文件内容
                                content = file.read()
                                # 打印提示信息
                                print("文件已存在,内容如下:")
                                # 打印文件内容
                                print(content)
                        # 如果文件不存在,捕获FileNotFoundError异常
                        except FileNotFoundError:
                            # 打印提示信息
                            print("文件不存在。")
                        

                        文本文件的写出

                        将数据写出到文本文件的步骤:创建或打开文件、写出数据和关闭文件。

                        # 定义文件名和要写入的数据
                        file_name = "myfile.txt"
                        data = "这是要写入文件的数据。"
                        # 尝试打开文件并写入数据
                        try:
                            # 使用with语句打开文件,确保文件在操作完成后自动关闭
                            with open(file_name, "w") as file:
                                # 将数据写入文件
                                file.write(data)
                                # 打印提示信息
                                print("数据已成功写入文件。")
                        # 如果发生异常,捕获并打印错误信息
                        except Exception as e:
                            print("写入文件时发生错误:", e)
                        

                        2.4、二进制文件的读和写

                        二进制文件的读入

                        从二进制文件读入数据的步骤:创建或打开文件、读取数据和关闭文件。

                        file_name = "myfile.txt"
                        try:
                            with open(file_name, "rb") as file:
                                content = file.read()
                                print("文件已存在,内容如下:")
                                print(content)
                        except FileNotFoundError:
                            print("文件不存在。")
                        D:\pythonLED\python.exe E:/pythonProject/1.py
                        文件已存在,内容如下:
                        b'\xd5\xe2\xca\xc7\xd2\xaa\xd0\xb4\xc8\xeb\xce\xc4\xbc\xfe\xb5\xc4\xca\xfd\xbe\xdd\xa1\xa3'
                        

                        二进制文件的写出

                        将数据写出到二进制文件的步骤:创建或打开文件、写出数据和关闭文件。

                        file_name = "myfile.txt"
                        data = b"This is binary data."
                        try:
                            with open(file_name, "wb") as file:
                                file.write(data)
                                print("数据已成功写入文件。")
                        except Exception as e:
                            print("写入文件时发生错误:", e)
                        

                        三、CSV文件操作

                        CSV文件是一种纯文本文件,用于存储表格和电子表格信息。

                        • 概念:CSV是Comma Separated Values(逗号分隔值)的缩写,它通过特定的结构来表示表格数据,通常用于简单数据的导入和导出操作。这种格式被广泛支持,可以在多种程序之间轻松迁移数据。
                        • 特点:CSV文件使用逗号作为字段分隔符,行中的每个单元格由逗号分隔。第一行通常包含列标题,为每列数据提供说明。
                        • 编码:虽然CSV文件可能使用不同的字符编码,7-bit ASCII提供了最基本的通用编码方式,确保了文件在不同环境中的可读性。
                        • 应用:CSV文件格式在用户、商业以及科学计算领域都有广泛应用,特别是在需要在不同的应用程序间传输表格数据时。例如,数据库程序通常会提供将数据导出为CSV文件的功能,以便其他电子表格程序能够导入这些数据。
                        • 兼容性:CSV并没有一个固定的通用标准,但RFC 4180文档提供了一个基础性的描述,很多实现都遵循这一描述。由于CSV格式简单,许多程序都允许用户预览文件内容,并指定分隔符、转义规则等,以确保正确读取数据。
                        • 操作:CSV文件可以通过任何文本编辑器创建和查看,同时大多数电子表格程序如Microsoft Excel、OpenOffice Calc和Google Sheets都能直接打开和处理CSV文件。当使用这类专业软件打开CSV文件时,数据将以表格形式呈现,方便用户阅读和编辑。

                          3.1、csv模块常用函数

                          reader函数

                          # 导入csv模块,用于处理CSV文件
                          import csv
                          # 定义一个函数,用于读取CSV文件并打印每一行数据
                          def read_csv_file(file_path):
                              # 使用with语句打开文件,确保文件在操作完成后自动关闭
                              with open(file_path, 'r') as file:
                                  # 创建一个csv.reader对象,用于读取CSV文件
                                  csv_reader = csv.reader(file)
                                  # 遍历csv_reader中的每一行数据
                                  for row in csv_reader:
                                      # 打印当前行的数据
                                      print(row)
                          # 调用函数并传入CSV文件路径
                          read_csv_file('example.csv')
                          

                          我们首先导入了csv模块。然后定义了一个名为read_csv_file的函数,该函数接受一个参数file_path,表示要读取的CSV文件的路径。在函数内部,我们使用open函数打开文件,并指定模式为只读(‘r’)。然后,我们创建了一个csv.reader对象,将打开的文件作为参数传递给它。接下来,我们使用for循环遍历csv_reader对象中的每一行数据,并将其打印出来。最后,我们调用read_csv_file函数,并传入CSV文件的路径作为参数。

                          writer函数

                          import csv
                          # 定义一个函数,用于将数据写入CSV文件
                          def write_csv_file(file_path, data):
                              # 使用with语句打开文件,确保文件在操作完成后自动关闭
                              with open(file_path, 'w', newline='') as file:
                                  # 创建一个csv.writer对象,用于写入CSV文件
                                  csv_writer = csv.writer(file)
                                  # 遍历数据列表
                                  for row in data:
                                      # 将每一行数据写入CSV文件
                                      csv_writer.writerow(row)
                          # 定义要写入CSV文件的数据
                          data = [
                              ['Name', 'Age', 'City'],
                              ['Alice', '25', 'New York'],
                              ['Bob', '30', 'San Francisco'],
                              ['Charlie', '35', 'Los Angeles']
                          ]
                          # 调用函数并传入CSV文件路径和数据
                          write_csv_file('example.csv', data)
                          
VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]