使用Python进行文件管理的4个聪明方法

news2024/9/30 21:26:38

本文将介绍如何使用 Python 进行文件管理和自动化处理,包括批量重命名文件、按类型移动文件、批量压缩文件以及解压缩文件等常见任务。通过具体的代码示例,读者可以快速上手并应用于实际项目中。

方法一:自动重命名文件
有时候,我们需要批量重命名文件,比如整理照片或文档时。Python 的 os 模块提供了许多文件操作的功能,包括重命名。
步骤:
1. 导入 os 模块。2. 获取文件列表。3. 为每个文件生成新名字。4. 重命名文件。
代码示例:
import os

def rename_files(directory, prefix="new_"):
    """
    批量重命名指定目录下的所有文件。
    
    :param directory: 目标目录路径
    :param prefix: 新文件名前缀,默认为 'new_'
    """
    # 获取目录下所有文件
    files = os.listdir(directory)
    
    # 遍历每个文件
    for filename in files:
        # 跳过隐藏文件(以 . 开头)
        if not filename.startswith('.'):
            # 构建完整文件路径
            old_path = os.path.join(directory, filename)
            new_name = prefix + filename
            new_path = os.path.join(directory, new_name)
            
            # 重命名文件
            os.rename(old_path, new_path)
            print(f"Renamed '{filename}' to '{new_name}'")

# 测试函数
directory_path = "path/to/your/directory"
rename_files(directory_path)
输出:
Renamed 'old_file.txt' to 'new_old_file.txt'
Renamed 'image.jpg' to 'new_image.jpg'
...
解释:
os.listdir() 返回指定目录下的文件列表。
os.path.join() 用于构建完整的文件路径。
os.rename() 用于重命名文件。
方法二:自动移动文件
当你的文件夹里有很多不同类型的文件时,可能需要将它们按类型分类存放。
步骤:
1. 定义目标文件夹。2. 创建目标文件夹(如果不存在)。3. 移动文件到目标文件夹。
代码示例:
import os
import shutil

def move_files_by_type(directory):
    """
    根据文件类型移动文件到不同的文件夹。
    
    :param directory: 目标目录路径
    """
    # 文件类型及其对应的文件夹
    file_types = {
        '.txt': 'TextFiles',
        '.jpg': 'Images',
        '.mp3': 'Music',
        '.mp4': 'Videos',
        '.pdf': 'Documents'
    }
    
    # 获取目录下所有文件
    files = os.listdir(directory)
    
    # 遍历每个文件
    for filename in files:
        # 获取文件扩展名
        extension = os.path.splitext(filename)[1]
        
        # 如果是已知类型
        if extension in file_types:
            target_folder = file_types[extension]
            
            # 创建目标文件夹(如果不存在)
            target_dir = os.path.join(directory, target_folder)
            if not os.path.exists(target_dir):
                os.makedirs(target_dir)
                
            # 构建源文件路径和目标文件路径
            source_path = os.path.join(directory, filename)
            target_path = os.path.join(target_dir, filename)
            
            # 移动文件
            shutil.move(source_path, target_path)
            print(f"Moved '{filename}' to '{target_folder}'")
        else:
            print(f"Ignored '{filename}' (unknown type)")

# 测试函数
directory_path = "path/to/your/directory"
move_files_by_type(directory_path)
输出:
Moved 'document.pdf' to 'Documents'
Moved 'image.jpg' to 'Images'
Moved 'song.mp3' to 'Music'
...
解释:
os.path.splitext() 用于获取文件扩展名。
shutil.move() 用于移动文件。
os.makedirs() 用于创建多级目录。
方法三:批量压缩文件
有时你需要将多个文件打包成一个压缩文件,以便发送或存储。Python 的 zipfile 模块可以帮助你轻松实现这一功能。
步骤:
1. 导入 zipfile 模块。2. 创建一个新的压缩文件。3. 将指定目录下的文件添加到压缩文件中。
代码示例:
import os
import zipfile

def zip_files(directory, output_zip="archive.zip"):
    """
    将指定目录下的所有文件压缩到一个 ZIP 文件中。
    
    :param directory: 目标目录路径
    :param output_zip: 输出的 ZIP 文件名,默认为 'archive.zip'
    """
    # 创建一个新的 ZIP 文件
    with zipfile.ZipFile(output_zip, 'w', zipfile.ZIP_DEFLATED) as zipf:
        # 获取目录下所有文件
        files = os.listdir(directory)
        
        # 遍历每个文件
        for filename in files:
            # 跳过隐藏文件(以 . 开头)
            if not filename.startswith('.'):
                # 构建完整文件路径
                file_path = os.path.join(directory, filename)
                
                # 添加文件到 ZIP 文件
                zipf.write(file_path, arcname=filename)
                print(f"Added '{filename}' to '{output_zip}'")

# 测试函数
directory_path = "path/to/your/directory"
zip_files(directory_path)
输出:
Added 'document.pdf' to 'archive.zip'
Added 'image.jpg' to 'archive.zip'
Added 'song.mp3' to 'archive.zip'
...
解释:
zipfile.ZipFile() 用于创建一个新的 ZIP 文件。
zipf.write() 用于将文件添加到 ZIP 文件中。
arcname 参数用于指定文件在 ZIP 文件中的名称。
方法四:自动解压缩文件
与压缩文件相对应,解压缩文件同样重要。你可以使用 zipfile 模块来解压 ZIP 文件。
步骤:
1. 导入 zipfile 模块。2. 打开 ZIP 文件。3. 解压文件到指定目录。
代码示例:
import os
import zipfile

def unzip_files(zip_file, output_directory="unzipped"):
    """
    解压指定的 ZIP 文件到指定目录。
    
    :param zip_file: ZIP 文件路径
    :param output_directory: 输出目录,默认为 'unzipped'
    """
    # 创建输出目录(如果不存在)
    if not os.path.exists(output_directory):
        os.makedirs(output_directory)
    
    # 打开 ZIP 文件
    with zipfile.ZipFile(zip_file, 'r') as zipf:
        # 解压所有文件到指定目录
        zipf.extractall(output_directory)
        print(f"Extracted all files from '{zip_file}' to '{output_directory}'")

# 测试函数
zip_file_path = "path/to/your/archive.zip"
unzip_files(zip_file_path)
输出:
Extracted all files from 'archive.zip' to 'unzipped'
解释:
zipfile.ZipFile() 用于打开 ZIP 文件。
zipf.extractall() 用于解压所有文件到指定目录。
实战案例分析:自动化文件管理脚本
假设你有一个文件夹 Documents,里面包含了大量的 PDF 文档、图片和其他文件。你希望:
1. 重命名所有 PDF 文件,前缀为 new_。2. 将所有 PDF 文件移动到 PDF_Docs 文件夹。3. 将所有图片(.jpg, .png)移动到 Images 文件夹。4. 将剩余文件压缩成一个 ZIP 文件。
代码示例:
import os
import shutil
import zipfile

def manage_files(directory):
    """
    自动化文件管理脚本。
    
    :param directory: 目标目录路径
    """
    # 1. 重命名所有 PDF 文件
    pdf_files = [f for f in os.listdir(directory) if f.endswith('.pdf')]
    for filename in pdf_files:
        old_path = os.path.join(directory, filename)
        new_name = 'new_' + filename
        new_path = os.path.join(directory, new_name)
        os.rename(old_path, new_path)
        print(f"Renamed '{filename}' to '{new_name}'")
    
    # 2. 移动所有 PDF 文件到 PDF_Docs 文件夹
    pdf_target_dir = os.path.join(directory, 'PDF_Docs')
    if not os.path.exists(pdf_target_dir):
        os.makedirs(pdf_target_dir)
    
    for filename in pdf_files:
        old_path = os.path.join(directory, 'new_' + filename)
        new_path = os.path.join(pdf_target_dir, filename)
        shutil.move(old_path, new_path)
        print(f"Moved '{filename}' to 'PDF_Docs'")
    
    # 3. 移动所有图片到 Images 文件夹
    image_files = [f for f in os.listdir(directory) if f.endswith(('.jpg', '.png'))]
    images_target_dir = os.path.join(directory, 'Images')
    if not os.path.exists(images_target_dir):
        os.makedirs(images_target_dir)
    
    for filename in image_files:
        old_path = os.path.join(directory, filename)
        new_path = os.path.join(images_target_dir, filename)
        shutil.move(old_path, new_path)
        print(f"Moved '{filename}' to 'Images'")
    
    # 4. 剩余文件压缩成一个 ZIP 文件
    remaining_files = [f for f in os.listdir(directory) if f not in pdf_files and f not in image_files]
    zip_file = os.path.join(directory, 'remaining_files.zip')
    with zipfile.ZipFile(zip_file, 'w', zipfile.ZIP_DEFLATED) as zipf:
        for filename in remaining_files:
            file_path = os.path.join(directory, filename)
            zipf.write(file_path, arcname=filename)
            print(f"Added '{filename}' to 'remaining_files.zip'")
    
    print("All tasks completed successfully!")

# 测试函数
directory_path = "path/to/your/Documents"
manage_files(directory_path)
输出:
Renamed 'report.pdf' to 'new_report.pdf'
Moved 'report.pdf' to 'PDF_Docs'
Moved 'image.jpg' to 'Images'
Added 'data.csv' to 'remaining_files.zip'
All tasks completed successfully!
解释:
重命名 PDF 文件: 使用列表推导式筛选出所有 PDF 文件,并逐个重命名。
移动 PDF 文件: 创建 PDF_Docs 文件夹,并将所有 PDF 文件移动进去。
移动图片文件: 创建 Images 文件夹,并将所有图片文件移动进去。
压缩剩余文件: 将剩余文件压缩成一个 ZIP 文件。
总结
本文介绍了如何利用 Python 进行批量文件管理,包括重命名文件、按类型移动文件、批量压缩文件以及解压缩文件等操作。通过具体的代码示例,展示了这些任务的实现方法。这些技术可以帮助用户高效地组织和处理大量文件,提高工作效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2180744.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

监控告警功能详细介绍及操作演示:运维团队的智能保障

在当今这个信息化高速发展的时代,运维团队面临着前所未有的挑战。为了确保系统的稳定性和高效运维,监控告警功能成为了运维团队不可或缺的得力助手。本文将详细介绍我们的监控告警功能,并结合实际操作页面进行演示,帮助运维团队更…

Docker入门指南:快速学习Docker的基本操作

为什么需要Docker 有时我们在本地开发好程序并成功运行之后,却在服务器上运行不起来,通过观察日志通常会发现,哦原来是这个库没安装,于是我们就需要先安装需要用到的库,然后再启动服务你可能还会发现用到的数据库信息…

《Linux从小白到高手》理论篇(六):Linux软件安装一篇通

List item 本篇介绍Linux软件安装相关的操作命令,看完本文,有关Linux软件安装相关操作的常用命令你就掌握了99%了。 Linux软件安装 RPM RPM软件的安装、删除、更新只有root权限才能使用;查询功能任何用户都可以操作;如果普通用…

真正的Open AI ——LLaMA颠覆开源大模型

1. LLaMA 简介 LLaMA(Large Language Model Meta AI)是由Meta(原Facebook)推出的一个大型语言模型系列,旨在通过更小的模型规模和更少的计算资源,实现与其他主流语言模型(如GPT)相媲…

spring简短注入

新建bean 创建set方法 jpackage com.dependency.spring6.bean;import org.slf4j.Logger; import org.slf4j.LoggerFactory;public class User {private static final Logger LOGGER LoggerFactory.getLogger(User.class);private String username;private String password;pr…

RPA跨流程复用元素技巧|实在RPA研究

为什么要跨流程复用元素 在 RPA 操作中,元素至关重要,因为自动化的本质就是模拟人类对元素的操作。基本上,每个流程都会包含若干个元素。对于同时维护多个流程的用户而言,相似的流程包,甚至是同一个元素。例如电商用户…

Solidworks斜接法兰快速绘制钣金箱体

Solidworks斜接法兰快速绘制钣金箱体 Chapter1 Solidworks斜接法兰快速绘制钣金箱体 Chapter1 Solidworks斜接法兰快速绘制钣金箱体 0.5mm间距为钣金焊接的预留焊缝。

Linux云计算 |【第四阶段】RDBMS1-DAY6

主要内容: MySQL索引(索引分类、创建索引)、用户及授权(创建用户并授权、查看授权、撤销授权、授权库mysql)、root密码恢复、备份、使用mysqldump进行逻辑备份、Percona 一、MySQL索引 1、基本概念 MySQL 索引(Inde…

给虚拟机安装操作系统以及无密码SSH登录

安装完虚拟化软件VMware Workstation Pro 17之后,我们下载了Ubuntu光盘映像文件,上次说演示desktop版的安装,但是考虑到后面要部署数据库,所以为了方便起见还是下载sever服务器版。 文件还挺大,在等待下载完成这会我们…

基于SpringBoot的休闲娱乐代理售票系统设计与实现

1.1研究背景 21世纪,我国早在上世纪就已普及互联网信息,互联网对人们生活中带来了无限的便利。像大部分的企事业单位都有自己的系统,由从今传统的管理模式向互联网发展,如今开发自己的系统是理所当然的。那么开发休闲娱乐代理售票…

C++那些事之内存优化

C那些事之内存优化 通常程序运行时内存是一个比较大的问题,如何减少内存占用和提升访问速度是至关重要。为了解决这些问题,C20 引入了 no_unique_address 特性,并结合空基类优化(EBO, Empty Base Optimization)&#x…

33 指针与数组:数组名与指针的关系、使用指针遍历数组、数组指针、指针数组、字符指针

目录​​​​​​​ 1 数组名与指针的关系 1.1 数组名 1.2 对数组名取地址 1.3 数组名与指针的区别 1.3.1 类型不同 1.3.2 sizeof 操作符的行为不同 1.3.3 & 操作符的行为不同 1.3.4 自增自减运算的行为不同 1.3.5 可变性不同 2 使用指针遍历数组 2.1 使用 *(nu…

智能网联汽车飞速发展,安全危机竟如影随形,如何破局?

随着人工智能、5G通信、大数据等技术的飞速发展,智能网联汽车正在成为全球汽车行业的焦点。特别是我国智能网联汽车市场规模近年来呈现快速增长态势,彰显了行业蓬勃发展的活力与潜力。然而,车联网技术的广泛应用也带来了一系列网络安全问题&a…

Mybatis知识

1. 基础知识 mybatis是基于java的持久层框架,它内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动,创建连接,创建statement等繁杂的过程。 通过xml或者注解的方式将要执行的各种sta…

序列化方式五——ProtoStuff

介绍 Protostuff是一个基于Java的高效序列化库,它使用Protocol Buffers(简称protobuf)协议,为Java对象提供高效、灵活且易用的序列化和反序列化方法。Protostuff的主要优势在于其高性能和简单的使用方式,相对于其他序…

C#多线程数据同步的几种方式(不同的锁)

无锁 多个关联数据无法完整获取修改 internal class Program{static void Main(string[] args){Console.WriteLine("Hello, World!");ThreadPool.QueueUserWorkItem(Thread1);ThreadPool.QueueUserWorkItem(Thread2);ThreadPool.QueueUserWorkItem(Thread3);Console…

SpringBoot框架在墙绘产品展示中的运用

4 系统设计 墙绘产品展示交易平台的设计方案比如功能框架的设计,比如数据库的设计的好坏也就决定了该系统在开发层面是否高效,以及在系统维护层面是否容易维护和升级,因为在系统实现阶段是需要考虑用户的所有需求,要是在设计阶段没…

linux查看进程所在的目录

在Linux系统中,查看一个进程所在的目录(即该进程的可执行文件所在的目录)可以通过多种方式实现。 以下是查找进程的可执行文件路径的方法: 使用ls -l /proc/[pid]/cwd 你可以通过查看/proc/[pid]/cwd的符号链接来找到进程的可执…

UE5蓝图实战:动态墙上挖坑与自定义坑尺寸

在Unreal Engine 5.3中,我利用蓝图系统开发了一个创新的挖坑Demo,该Demo展示了如何在实时环境中动态地在墙体上挖坑,并允许用户自定义坑的大小。这一过程得益于UE5官方提供的Geometry Script插件,该插件通过蓝图接口实现了强大的网…

sql-labs:42~65

less42(单引号闭合、报错回显) login_useradmin login_password123 and if(11,sleep(2),1) # # 单引号闭合 ​ login_useradmin login_password123and updatexml(1,concat(0x7e,database(),0x7e),1)# # 报错回显…