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

devtools/2025/1/20 21:17:40/

写一个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. 搬运的文件总数和未搬运的文件总数。

import os
import shutil
import socket
from datetime import datetimedef 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 = 0skipped_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 += 1else:# 记录未搬运的文件路径到日志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中的文件名包含路径,脚本将不会匹配路径,只会根据文件名进行排除。


http://www.ppmy.cn/devtools/152191.html

相关文章

PostCSS安装与基本使用?

1. 安装PostCSS及其CLI工具 在全局环境中安装PostCSS CLI工具以便从命令行运行PostCSS: npm install -g postcss postcss-cli如果你想在项目中局部安装: npm install --save-dev postcss postcss-cli2. 创建PostCSS配置文件 在项目根目录下创建一个名…

lvm快照备份

前提 数据文件要在逻辑卷上; 此逻辑卷所在卷组必须有足够空间使用快照卷; 数据文件和事务日志要在同一个逻辑卷上; 前提:MySQL数据lv和将要创建的快照要在同一vg,vg要有足够的空间存储 优点 几乎是热备&…

Nature Microbiology | John C. Alverdy组-肠杆菌素抑制芳香烃受体促进小鼠细菌性败血症...

研究论文 ● 期刊:Nature Microbiology (IF:20.5) ● DOI:https://doi.org/10.1038/s41564-024-01882-9 ●原文链接: https://www.nature.com/articles/s41564-024-01882-9 ● 第一作者:Robert C. Keskey ● 通讯作者:Robert C. …

深入探索Go语言中的临时对象池:sync.Pool

深入探索Go语言中的临时对象池:sync.Pool 在当前的编程世界中,Go语言以其简洁的语法、高效的并发支持以及强大的标准库而受到开发者们的青睐。对于那些追求极致性能的程序员来说,Go语言的sync.Pool提供了一个理想的工具集来加速开发过程并优化程序性能。本文旨在全面深入地…

我的世界-与门、或门、非门等基本门电路实现

一、红石比较器 (1) 红石比较器结构 红石比较器有前端单火把、后端双火把以及两个侧端 其中后端和侧端是输入信号,前端是输出信号 (2) 红石比较器的两种模式 比较模式 前端火把未点亮时处于比较模式 侧端>后端 → 0 当任一侧端强度大于后端强度时,输出…

WebSocket有哪些缺点?应该如何解决?

虽然 WebSocket 提供了许多优势,使其成为实时通信的理想选择,但它也有一些缺点和局限性。以下是 WebSocket 的一些主要缺点: 1. 初始握手开销 HTTP 握手:WebSocket 连接需要先通过 HTTP 协议进行握手,这增加了初始连接…

麒麟操作系统服务架构保姆级教程(十)rewrite跳转

如果你想拥有你从未拥有过的东西,那么你必须去做你从未做过的事情 我们访问一个网页的时候会遇到一些奇形怪状的url地址,想优化一下,看着顺眼一点,或者打开一个短视频软件想摸鱼刷一会视频,在打开界面的时候无意间按到…

htmlcssJavaScript网页开发:年会手机号抽奖案例

见过不少人、经过不少事、也吃过不少苦&#xff0c;感悟世事无常、人心多变&#xff0c;靠着回忆将往事串珠成链&#xff0c;聊聊感情、谈谈发展&#xff0c;我慢慢写、你一点一点看...... <!DOCTYPE html> <html> <head> <meta charset"…