Python脚本搬运当前文件夹及其子文件夹中所有的.c格式的文件到当前新建的文件夹中

写一个Python脚本,用来搬运当前文件夹及其子文件夹中所有的.c格式的文件到当前新建的SourceLib文件夹中,并排除搬运isnocopyname.txt中定义的c文件。新建Lib_Log.txt文本,开头打印当前计算器名和时间,并将搬运的文件的路径及文件名,和未搬运的文件的路径和文件名输出到Lib_Log.txt中,并将搬运的文件总数和未搬运的文件总数打印到Lib_Log.txt文本末尾。

脚本示例及日志,附件可在资源(Python搬运文件)下载。

以下是一个Python脚本,满足你的需求。它会递归地搜索当前文件夹及其子文件夹中的所有.c文件,将符合条件的文件搬运到新建的SourceLib文件夹中,同时排除isnocopyname.txt中定义的文件。脚本会在Lib_Log.txt中记录以下内容:

  1. 当前计算机名和时间。

  2. 搬运的文件路径及文件名。

  3. 未搬运的文件路径及文件名。

  4. 搬运的文件总数和未搬运的文件总数。

python 复制代码
import os
import shutil
import socket
from datetime import datetime

def move_c_files():
    # 获取当前文件夹路径
    current_dir = os.getcwd()
    
    # 获取计算机名和当前时间
    computer_name = socket.gethostname()
    current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    
    # 创建SourceLib文件夹
    source_lib_dir = os.path.join(current_dir, 'SourceLib')
    if not os.path.exists(source_lib_dir):
        os.mkdir(source_lib_dir)
        print(f"已创建文件夹:{source_lib_dir}")
    
    # 读取isnocopyname.txt中定义的需要排除的c文件
    exclude_files = set()
    isnocopyname_path = os.path.join(current_dir, 'isnocopyname.txt')
    if os.path.exists(isnocopyname_path):
        with open(isnocopyname_path, 'r') as f:
            for line in f:
                # 去除空白字符并添加到排除列表中
                exclude_files.add(line.strip())
        print(f"已加载排除文件列表:{exclude_files}")
    else:
        print("未找到isnocopyname.txt,将不会排除任何文件。")
    
    # 打开日志文件
    log_path = os.path.join(current_dir, 'Lib_Log.txt')
    with open(log_path, 'w') as log_file:
        # 写入计算机名和当前时间
        log_file.write(f"计算机名:{computer_name}\n")
        log_file.write(f"当前时间:{current_time}\n")
        log_file.write("-" * 40 + "\n")
        
        # 初始化计数器
        moved_count = 0
        skipped_count = 0
        
        # 遍历当前文件夹及其子文件夹中的所有文件
        for root, dirs, files in os.walk(current_dir):
            for file in files:
                # 判断是否为.c文件
                if file.endswith('.c'):
                    # 获取文件的完整路径
                    src_path = os.path.join(root, file)
                    # 目标路径为SourceLib文件夹中的文件名
                    dst_path = os.path.join(source_lib_dir, file)
                    
                    # 检查是否在排除列表中
                    if file not in exclude_files:
                        # 搬运文件到SourceLib文件夹
                        shutil.move(src_path, dst_path)
                        # 记录搬运的文件路径到日志
                        log_file.write(f"搬运文件:{src_path} -> {dst_path}\n")
                        moved_count += 1
                    else:
                        # 记录未搬运的文件路径到日志
                        log_file.write(f"未搬运文件(排除列表):{src_path}\n")
                        skipped_count += 1
        
        # 写入搬运和未搬运的文件总数
        log_file.write("-" * 40 + "\n")
        log_file.write(f"搬运的文件总数:{moved_count}\n")
        log_file.write(f"未搬运的文件总数:{skipped_count}\n")
    
    print(f"日志已保存到:{log_path}")
    print(f"搬运的文件总数:{moved_count}")
    print(f"未搬运的文件总数:{skipped_count}")

if __name__ == '__main__':
    move_c_files()

使用说明:

  1. 创建SourceLib文件夹 :脚本会检查当前目录下是否存在SourceLib文件夹,如果不存在则创建。

  2. 读取排除文件列表 :脚本会读取当前目录下的isnocopyname.txt文件,将其中列出的文件名(每行一个)添加到排除列表中。如果isnocopyname.txt不存在,则不会排除任何文件。

  3. 递归搜索.c文件 :脚本使用os.walk递归遍历当前目录及其所有子目录,查找所有以.c结尾的文件。

  4. 搬运文件 :如果文件不在排除列表中,则将其从原路径搬运到SourceLib文件夹中。

  5. 记录日志 :脚本会将搬运的文件路径和未搬运的文件路径记录到Lib_Log.txt中。

示例:

复制代码
计算机名:COMPUTER_NAME
当前时间:2025-01-19 12:34:56
----------------------------------------
搬运文件:/path/to/source/file1.c -> /path/to/SourceLib/file1.c
未搬运文件(排除列表):/path/to/source/file2.c
----------------------------------------
搬运的文件总数:1
未搬运的文件总数:1

使用方法:

  1. 将该脚本保存为一个.py文件,例如move_c_files.py

  2. 将该脚本文件放在目标文件夹中,确保该文件夹及其子文件夹中存在.c文件,以及isnocopyname.txt文件(如果需要排除某些文件的话)。

  3. 打开命令行或终端,切换到该脚本所在的文件夹目录。

  4. 运行脚本,命令为python move_c_files.py,脚本会自动执行搬运操作,并生成Lib_Log.txt日志文件。

注意事项:

  • 如果目标文件夹中已经存在同名文件,脚本会覆盖目标文件。如果需要避免覆盖,可以在搬运前检查文件是否存在,并进行相应的处理(例如重命名或跳过)。

  • 如果isnocopyname.txt中的文件名包含路径,脚本将不会匹配路径,只会根据文件名进行排除。

相关推荐
qinyia11 小时前
Wisdom SSH 是一款创新性工具,通过集成 AI 助手,为服务器性能优化带来极大便利。
服务器·人工智能·ssh
我真的是大笨蛋13 小时前
K8S-Pod(下)
java·笔记·云原生·容器·kubernetes
碳水加碳水14 小时前
Java代码审计实战:XML外部实体注入(XXE)深度解析
java·安全·web安全·代码审计
努力也学不会java15 小时前
【设计模式】 原型模式
java·设计模式·原型模式
方渐鸿15 小时前
【2024】k8s集群 图文详细 部署安装使用(两万字)
java·运维·容器·kubernetes·k8s·运维开发·持续部署
晓衣15 小时前
2025“獬豸杯”全国电子数据取证竞赛-k8s服务器取证wp
服务器·经验分享·程序人生·网络安全·容器·kubernetes·学习方法
学亮编程手记15 小时前
K8S v1.33 版本主要新特性介绍
java·容器·kubernetes
li357416 小时前
将已有 Vue 项目通过 Electron 打包为桌面客户端的完整步骤
前端·vue.js·electron
Icoolkj16 小时前
VuePress 与 VitePress 深度对比:特性、差异与选型指南
前端·javascript·vue.js
Haven-16 小时前
Java-面试八股文-JVM篇
java·jvm·面试