python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > python文件处理

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

作者:岫珩

这篇文章主要为大家详细介绍了如何使用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文件处理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文