基于python开发文件常见处理工具

 更新时间:2025年06月30日 08:54:10   作者:岫珩  
这篇文章主要为大家详细介绍了如何使用python开发一个文件处理工具,包含文件读写,后缀获取,压缩和解压,文件夹遍历等操作,需要的可以了解下

1. 直接食用代码

1.1 读文件

读取文件中内容

# 读取文件内容 file_path: 文件路径
def read_file(file_path):
    # 打开文件
    with open(file_path, 'r', encoding='utf-8') as f:
        # 读取文件内容
        content = f.read()
        # 返回文件内容
        return content

1.2 写文件

将内容写到文件中

# 将内容写入文件 file_path: 文件路径, content: 文件内容
def write_file(file_path, content):
    # 创建文件
    with open(file_path, 'w', encoding='utf-8') as f:
        # 写入内容
        f.write(content)
        # 关闭文件
        f.close()

1.3 获取文件后缀

判断文件是否为压缩文件

import os
# 判断文件是否为压缩文件 file_path 文件路径
def is_pack(file_path):
    # 获取文件扩展名
    ext = os.path.splitext(file_path)[1].lower()
    # 判断文件扩展名
    if ext in ['.zip', '.rar', '.7z']:
        # 是压缩文件则返回True
        return True

1.4 打包文件(压缩)

压缩文件

import os
import zipfile
# 将指定文件夹打包为 zip 文件 folder_path: 待压缩文件夹路径, output_path: 压缩文件保存路径
def zip_folder(folder_path, output_path):
    # folder_path: 要打包的文件夹路径
    # output_path: 输出的 zip 文件路径
    # 创建 zip 文件
    with zipfile.ZipFile(output_path, 'w', zipfile.ZIP_DEFLATED) as zip_file:
        # 遍历文件夹
        for root, dirs, files in os.walk(folder_path):
            for file in files:
                # 获取文件绝对路径
                file_path = os.path.join(root, file)
                # 获取文件在zip文件中的相对路径
                reletive_path = os.path.relpath(file_path, folder_path)
                # 添加文件到zip文件中
                zip_file.write(file_path, os.path.relpath(file_path, folder_path))

1.5 解压

解压缩文件

import subprocess
import os
import zipfile
# 解压缩文件 filepath: 压缩文件路径, target_folder: 解压目标路径
def unpack(filepath, target_folder):

    # 以上注释代码的整合 目的为了获取压缩包文件名(不带后缀)
    file_name_pre = os.path.splitext(os.path.basename(filepath))[0]
    print("filepath----> ",filepath)
    print("file_name_pre----> ",file_name_pre)
    print("target_folder----> ",target_folder)
    # target_folder = os.path.join(target_folder, file_name_pre)

    # 本地winrar命令集成
    command = [
            # 本地WinRAR.exe文件路径
            'C:\\Program Files\\WinRAR\\WinRAR.exe',
            # 解压并保留完整目录结构
            'x',           
            # 传入源RAR文件的绝对路径(引号包裹,防止路径中有空格)
            os.path.abspath(filepath),
            # 目标目录(确保路径以一个反斜杠结束,否则WinRAR会出错),如果该参数省略,则会默认为当前目录
            target_folder.rstrip('\\') + '\\',
            # 覆盖已存在的文件
            '-o+',         
            # 将压缩包名称作为子目录添加到目标路径中,如果添加该参数,则压缩包名称会作为子目录添加到目标路径中,产生两层一样的目录
            # '-ad',
            # 后台运行
            # '-ibck',       
            # 自动确认所有提示
            '-y'           
        ]
    
    print("正在执行命令:", " ".join(command))

    # 运行命令 subprocess本身会处理空格问题
    result = subprocess.run(command, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)

    print("命令执行完毕")
    # 因为解压后的目录是子目录,故指定目录为解压后的目录, 即文件均在下面这个文件目录中
    target_folder = target_folder+"\\"+file_name_pre
    print('target_folder2:',target_folder)

1.6 遍历文件夹

获取文件夹中所有文件列表

import os
# 遍历文件夹,获取文件夹下所有文件列表 folder_path: 文件夹路径
def iteration_folder(folder_path):
    
    # 获取目标目录下的所有文件路径
    # 定义一个空列表,用于存储所有文件路径
    file_list = []
    # 遍历指定目录下的所有文件和子目录
    for root, dirs, files in os.walk(folder_path):
        # 遍历文件
        for file in files:
            print('file---> ',file)
            # 获取文件路径
            file_path = os.path.join(root, file)

            # 将文件路径添加到列表中
            file_list.append(file_path)
    print('----------> file_list:',file_list)

    # 返回文件列表
    return file_list

2. 完整详解代码及示例演示

2.1 完整代码

file_utils.py

# python 工具 判断是否为压缩文件、读取文件、写文件、解压缩、遍历获取文件夹下所有文件


# 所需引入的库
import subprocess
import os
import zipfile

# 读取文件内容 file_path: 文件路径
def read_file(file_path):
    # 打开文件
    with open(file_path, 'r', encoding='utf-8') as f:
        # 读取文件内容
        content = f.read()
        # 返回文件内容
        return content


# 将内容写入文件 file_path: 文件路径, content: 文件内容
def write_file(file_path, content):
    # 创建文件
    with open(file_path, 'w', encoding='utf-8') as f:
        # 写入内容
        f.write(content)
        # 关闭文件
        f.close()


# 判断文件是否为压缩文件 file_path 文件路径
def is_pack(file_path):
    # 获取文件扩展名
    ext = os.path.splitext(file_path)[1].lower()
    # 判断文件扩展名
    if ext in ['.zip', '.rar', '.7z']:
        # 是压缩文件则返回True
        return True



# 将指定文件夹打包为 zip 文件 folder_path: 待压缩文件夹路径, output_path: 压缩文件保存路径
def zip_folder(folder_path, output_path):
    # folder_path: 要打包的文件夹路径
    # output_path: 输出的 zip 文件路径
    # 创建 zip 文件
    with zipfile.ZipFile(output_path, 'w', zipfile.ZIP_DEFLATED) as zip_file:
        # 遍历文件夹
        for root, dirs, files in os.walk(folder_path):
            for file in files:
                # 获取文件绝对路径
                file_path = os.path.join(root, file)
                # 获取文件在zip文件中的相对路径
                reletive_path = os.path.relpath(file_path, folder_path)
                # 添加文件到zip文件中
                zip_file.write(file_path, os.path.relpath(file_path, folder_path))


# 解压缩文件 filepath: 压缩文件路径, target_folder: 解压目标路径
def unpack(filepath, target_folder):

    # 以上注释代码的整合 目的为了获取压缩包文件名(不带后缀)
    file_name_pre = os.path.splitext(os.path.basename(filepath))[0]
    print("filepath----> ",filepath)
    print("file_name_pre----> ",file_name_pre)
    print("target_folder----> ",target_folder)
    # target_folder = os.path.join(target_folder, file_name_pre)

    # 本地winrar命令集成
    command = [
            # 本地WinRAR.exe文件路径
            'C:\\Program Files\\WinRAR\\WinRAR.exe',
            # 解压并保留完整目录结构
            'x',           
            # 传入源RAR文件的绝对路径(引号包裹,防止路径中有空格)
            os.path.abspath(filepath),
            # 目标目录(确保路径以一个反斜杠结束,否则WinRAR会出错),如果该参数省略,则会默认为当前目录
            target_folder.rstrip('\\') + '\\',
            # 覆盖已存在的文件
            '-o+',         
            # 将压缩包名称作为子目录添加到目标路径中,如果添加该参数,则压缩包名称会作为子目录添加到目标路径中,产生两层一样的目录
            # '-ad',
            # 后台运行
            # '-ibck',       
            # 自动确认所有提示
            '-y'           
        ]
    
    print("正在执行命令:", " ".join(command))

    # 运行命令 subprocess本身会处理空格问题
    result = subprocess.run(command, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)

    print("命令执行完毕")
    # 因为解压后的目录是子目录,故指定目录为解压后的目录, 即文件均在下面这个文件目录中
    target_folder = target_folder+"\\"+file_name_pre
    print('target_folder2:',target_folder)

# 遍历文件夹,获取文件夹下所有文件列表 folder_path: 文件夹路径
def iteration_folder(folder_path):
    
    # 获取目标目录下的所有文件路径
    # 定义一个空列表,用于存储所有文件路径
    file_list = []
    # 遍历指定目录下的所有文件和子目录
    for root, dirs, files in os.walk(folder_path):
        # 遍历文件
        for file in files:
            print('file---> ',file)
            # 获取文件路径
            file_path = os.path.join(root, file)

            # 将文件路径添加到列表中
            file_list.append(file_path)
    print('----------> file_list:',file_list)

    # 返回文件列表
    return file_list





if __name__ == '__main__':

    # 1. 读取文件内容
    print("<--------文件读取测试--------> ")
    content = read_file(r'D:\重载\TEST2ZIP\TEST2ZIP\test1.txt')
    print("content----> ",content)
    # 2. 写入文件内容
    write_file(r'D:\重载\TEST2ZIP\TEST2ZIP\test4.txt',content)


    # 3. 检测文件是否为压缩文件
    print("<--------判断类型是否为压缩包--------> ")
    is_zip1 = is_pack(r'D:\重载\TEST2ZIP\TEST2ZIP\test1.txt')
    print('----------> is_zip1:',is_zip1)
    is_zip2 = is_pack(r'D:\重载\TEST2ZIP\TEST2ZIP.rar')
    print('----------> is_zip2:',is_zip2)
    # 特殊测试,该文件不存在,同样可以得到结果
    is_zip3 = is_pack(r'D:\重载\TEST2ZIP\TEST2ZIP\test1.zip')
    print('----------> is_zip3:',is_zip3)


    # 4. 解压缩文件
    print("<--------判断类型是否为压缩包--------> ")
    unpack(r'D:\重载\TEST2ZIP\TEST2ZIP.rar', r'D:\重载\TEST2ZIP\rar_test')

    # 5. 压缩文件
    # print("<--------判断类型是否为压缩包--------> ")

    # 6. 获取指定目录下的所有文件
    # print("<--------判断类型是否为压缩包--------> ")

2.2 示例演示

2.2.1 读文件

执行代码,输出读取结果

如图

2.2.2 写文件

执行代码,查看结果

指定位置查看是否生成文件

2.2.3 获取文件后缀

判断文件是否为压缩包

执行代码,查看结果

2.2.4 解压文件

执行代码,查看指定目录是否有解压后的文件

结果如下

注意,这里解压缩后的目录是子目录,即指定目录下会生成一个子目录存放文件

2.2.5 压缩文件

执行代码查看结果

如图压缩文件生成

2.2.6 遍历文件夹

获取文件夹中所有文件的列表

执行代码,查看结果

对比文件夹目录中的文件

到此这篇关于基于python开发文件常见处理工具的文章就介绍到这了,更多相关python文件处理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python逐像素获取栅格经纬度分别保存在两个矩阵中(代码收藏)

    python逐像素获取栅格经纬度分别保存在两个矩阵中(代码收藏)

    这篇文章主要介绍了python逐像素获取栅格经纬度分别保存在两个矩阵中的实现示例,建议收藏代码总会用到,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2024-01-01
  • 解决Pandas生成Excel时的sheet问题的方法总结

    解决Pandas生成Excel时的sheet问题的方法总结

    估计有不少小伙伴在将 DataFrame导入到Excel的时候,遇到过下面这种尴尬的情况:想给一个现有的Excel文件追加一个sheet,结果发现其它的sheet都没了等,本文就来告诉你如何解决这些问题
    2022-08-08
  • Python中shutil模块的学习笔记教程

    Python中shutil模块的学习笔记教程

    shutil模块是一种高层次的文件操作工具,类似于高级API,主要强大之处在于其对文件的复制与删除操作更是比较支持好。下面这篇文章主要介绍了Python中shutil模块的相关教程,需要的朋友可以参考学习,下面来一起看看吧。
    2017-04-04
  • 关于DataFrame取值操作总结(取指定列指定值的行)

    关于DataFrame取值操作总结(取指定列指定值的行)

    这篇文章主要介绍了关于DataFrame取值操作总结(取指定列指定值的行),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • Python 进程操作之进程间通过队列共享数据,队列Queue简单示例

    Python 进程操作之进程间通过队列共享数据,队列Queue简单示例

    这篇文章主要介绍了Python 进程操作之进程间通过队列共享数据,队列Queue,结合实例形式分析了Python进程数据共享、队列数据处理相关操作技巧,需要的朋友可以参考下
    2019-10-10
  • Python 读写文件的操作代码

    Python 读写文件的操作代码

    本文通过实例代码给大家介绍了Python 读写文件的操作方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-09-09
  • Python Pexpect库的简单使用方法

    Python Pexpect库的简单使用方法

    这篇文章主要介绍了Python Pexpect库的简单使用方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • Jupyter notebook无法链接内核、运行代码问题

    Jupyter notebook无法链接内核、运行代码问题

    文章主要介绍了在VSCode中使用Jupyter Notebook遇到的问题及其解决过程,问题包括包版本冲突、文件冲突、路径错误和找不到文件,通过逐一排查和安装相关依赖包,最终解决了这些问题,使得Jupyter Notebook可以在VSCode中正常运行
    2025-02-02
  • 用Python自动清理电脑内重复文件,只要10行代码(自动脚本)

    用Python自动清理电脑内重复文件,只要10行代码(自动脚本)

    这篇文章主要介绍了用Python自动清理电脑内重复文件,只要10行代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • Python socket处理client连接过程解析

    Python socket处理client连接过程解析

    这篇文章主要介绍了Python socket处理client连接过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03

最新评论