当前位置: 首页 > news >正文

ChatGPT生成的一些有趣的文件管理用python小程序

1. 在前位置中的所有文件夹内增加一个名为 abc 的新文件夹

import osdef create_abc_directories(root_dir='.'):# 获取当前目录下的所有目录subdirectories = [d for d in os.listdir(root_dir) if os.path.isdir(os.path.join(root_dir, d))]# 在每个目录中创建名为abc的子目录for directory in subdirectories:abc_dir = os.path.join(root_dir, directory, 'abc')os.makedirs(abc_dir, exist_ok=True)print(f"在 {directory} 目录中创建了 {abc_dir} 目录")if __name__ == "__main__":create_abc_directories()

用法:保存为 *.py文件,增加x权限,执行命令:  python *.py

2. 批量新建以文件 a.txt 内的名称命名的文件夹

import osdef create_folders_from_file(file_path='a.txt'):# 检查文件是否存在if not os.path.exists(file_path):print(f"错误: 文件 '{file_path}' 不存在。")return# 打开文件并逐行读取文件名with open(file_path, 'r') as file:folder_names = [line.strip() for line in file.readlines()]# 在当前位置创建文件夹,如果同名文件夹已存在则跳过for folder_name in folder_names:folder_path = os.path.join(os.getcwd(), folder_name)if os.path.exists(folder_path) and os.path.isdir(folder_path):print(f"文件夹 '{folder_name}' 已存在,跳过创建。")else:os.makedirs(folder_path, exist_ok=True)print(f"已创建文件夹: {folder_path}")if __name__ == "__main__":create_folders_from_file()

运行命令:  python *.py ./a.txt 

这个脚本首先检查文件a.txt是否存在,然后逐行读取该文件中的名称。对于每个名称,它构建文件夹路径并检查是否已经存在。如果存在,则输出提示信息并跳过创建;否则,它将创建新的文件夹。


 

3.检查当前位置中的所有空文件夹并将其删除,递归执行

import osdef remove_empty_directories(root_dir='.'):# 获取当前目录下的所有子目录和文件for root, dirs, files in os.walk(root_dir, topdown=False):for directory in dirs:folder_path = os.path.join(root, directory)# 检查目录是否为空if not os.listdir(folder_path):print(f"删除空目录: {folder_path}")os.rmdir(folder_path)if __name__ == "__main__":remove_empty_directories()

这个脚本使用os.walk函数遍历目录树,从底层向上遍历目录。对于每个目录,它检查是否为空,如果是,则删除该目录。

4.为当前位置下的子文件夹  在/home/link/中的同名子文件夹内  创建软连接,软连接的名称是abcd

import os# 获取当前目录
current_dir = os.getcwd()# 设置链接目录
link_dir = "/home/link"# 遍历当前目录中的子目录
for dir_name in os.listdir(current_dir):# 检查是否是目录if os.path.isdir(os.path.join(current_dir, dir_name)):# 构建软链接的目标路径link_target = os.path.join(link_dir, dir_name, "abcd")# 创建软链接os.symlink(os.path.join(current_dir, dir_name), link_target)print(f"Created symlink for {dir_name} in {link_target}")

5.为当前位置中所有文件夹内的同名子文件夹批量创建软连接,软连接名称以父文件夹来命名

编写一个python脚本,其功能是: 检查当前位置所有文件夹内是否有名称为abc的子文件夹,如果有,则在/home/link/中为子文件夹abc创建软链接,软链接的名称为其父文件夹的名称

import os# 获取当前目录
current_dir = os.getcwd()# 设置链接目录
link_dir = "/home/link"# 遍历当前目录中的子目录
for dir_name in os.listdir(current_dir):dir_path = os.path.join(current_dir, dir_name)abc_dir_path = os.path.join(dir_path, "abc")# 检查是否是目录且 abc 子目录存在if os.path.isdir(dir_path) and os.path.exists(abc_dir_path) and os.path.isdir(abc_dir_path):# 构建软链接的目标路径link_target = os.path.join(link_dir,  dir_name)# 创建软链接os.symlink(abc_dir_path, link_target)print(f"Created symlink for {abc_dir_path} in {link_target}")

 例如,/home/test/中有两个文件夹 公司A 公司B,他们都有同样的文件夹abc,则运行该脚本后,会/home/link/中生成 公司A 公司B 两个软链接文件,分别指向各自文件夹内的 abc

该用法适用的场景: 在Company文件夹中有100个以公司名称命名的文件夹,每个公司的文件夹中,是以各种业务名称命名的子文件夹;如果想对各个公司的同一个项目创建软连接到Projetc文件夹中,则采用该脚本;这样在 Projetc/项目X/ 文件家内,就会出现以各个公司名为文件夹的软连接。

6. 查找具有相同名称关键字的文件夹

其功能是: 比较 /home/A 和 /home/B 两个文件夹内的文件夹名称,如果任意两个文件夹名称中有3个以上的中文字符相同,则在a.txt文本中的同一行记录正两个文件夹的路径

import osdef get_chinese_characters(s):return [c for c in s if '\u4e00' <= c <= '\u9fff']def compare_folders(folder_a, folder_b, output_file):folders_a = os.listdir(folder_a)folders_b = os.listdir(folder_b)with open(output_file, 'w', encoding='utf-8') as output:for folder_name_a in folders_a:for folder_name_b in folders_b:chinese_chars_a = set(get_chinese_characters(folder_name_a))chinese_chars_b = set(get_chinese_characters(folder_name_b))common_chars = chinese_chars_a.intersection(chinese_chars_b)if len(common_chars) >= 3:path_a = os.path.join(folder_a, folder_name_a)path_b = os.path.join(folder_b, folder_name_b)output.write(f'{path_a}\t{path_b}\n')if __name__ == "__main__":folder_a_path = "/home/A"folder_b_path = "/home/B"output_file_path = "a.txt"compare_folders(folder_a_path, folder_b_path, output_file_path)print("Comparison completed. Results saved in a.txt.")

相关文章:

  • Vue框架学习笔记——计算属性
  • 数据结构 | 二叉树的概念及前中后序遍历
  • 鸿蒙开发学习——应用程序框架
  • 增强静态数据的安全性
  • Java实现通过经纬度求两个任意地点在球面上的距离
  • java开发之个微群聊自动添加好友
  • 装饰者设计模式
  • vue3中的动态component组件
  • 前端命名规范总结
  • linaro交叉编译工具链下载与使用笔记
  • 量子计算的世界:探索叠加态与Python编程
  • C语言——数组转换
  • Zabbix“专家坐诊”第212期问答汇总
  • 外包干了5个月,技术退步明显.......
  • SELinux refpolicy详解(2)
  • [译] 怎样写一个基础的编译器
  • Android Studio:GIT提交项目到远程仓库
  • Android 控件背景颜色处理
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • flutter的key在widget list的作用以及必要性
  • JAVA_NIO系列——Channel和Buffer详解
  • Javascript基础之Array数组API
  • Laravel5.4 Queues队列学习
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • SQLServer之创建数据库快照
  • text-decoration与color属性
  • 彻底搞懂浏览器Event-loop
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 将回调地狱按在地上摩擦的Promise
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 走向全栈之MongoDB的使用
  • AI算硅基生命吗,为什么?
  • puppet连载22:define用法
  • Spring Batch JSON 支持
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • ###项目技术发展史
  • #pragma预处理命令
  • #ubuntu# #git# repository git config --global --add safe.directory
  • #传输# #传输数据判断#
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (arch)linux 转换文件编码格式
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (算法)Game
  • (一) storm的集群安装与配置
  • (转)ORM
  • (转)德国人的记事本
  • (转)使用VMware vSphere标准交换机设置网络连接
  • (转载)跟我一起学习VIM - The Life Changing Editor