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

python脚本补充

本文是对实用的 Python 小脚本_python写脚本-CSDN博客的一点补充。对简单脚本的一些操作上的优化。

###Utilities
###
###重命名文件名
import os
import tkinter as tk
from tkinter import filedialog, simpledialog, messageboxdef batch_rename():# 弹出文件夹选择对话框directory = filedialog.askdirectory()if not directory:return# 弹出输入对话框让用户输入前缀prefix = simpledialog.askstring("输入前缀", "请输入文件名前缀:")if not prefix:returntry:for count, filename in enumerate(os.listdir(directory)):dst = f"{prefix}{str(count)}.txt"src = os.path.join(directory, filename)dst = os.path.join(directory, dst)os.rename(src, dst)# 命名完成,弹出成功提示框messagebox.showinfo("完成", "文件重命名完成!")except Exception as e:# 出现错误,弹出错误提示框messagebox.showerror("错误", f"重命名过程中出现错误: {e}")#finally:# 关闭主窗口,结束程序#root.destroy()# 创建主窗口
# root = tk.Tk()
# root.withdraw()  # 隐藏主窗口
#
# # 调用重命名函数
# batch_rename()
#
# # 进入主事件循环
# root.mainloop()###
###文件备份
import shutil
import os
import timedef backup_files():try:# 获取脚本所在目录script_dir = os.path.dirname(os.path.abspath(__file__))# 构建 copy.txt 文件的路径config_file_path = os.path.join(script_dir, 'copy.txt')# 检查 copy.txt 文件是否存在,不存在则创建if not os.path.exists(config_file_path):with open(config_file_path, 'w', encoding='utf-8') as file:file.write("path/to/source/directory\npath/to/backup/directory")print(f"未找到 copy.txt 文件,已在 {script_dir} 下创建该文件,请在文件中填写源目录和备份目录路径。")return# 读取 copy.txt 文件内容with open(config_file_path, 'r', encoding='utf-8') as file:lines = file.readlines()if len(lines) < 2:raise ValueError("copy.txt 文件内容不足两行,请确保包含源目录和备份目录路径。")source_directory = lines[0].strip()backup_directory = lines[1].strip()# 检查源目录是否存在if not os.path.exists(source_directory):raise FileNotFoundError(f"源目录 {source_directory} 不存在。")# 检查备份目录是否存在,不存在则创建if not os.path.exists(backup_directory):os.makedirs(backup_directory)print(f"备份目录 {backup_directory} 不存在,已创建该目录。")# 创建备份文件夹timestamp = time.strftime("%Y%m%d%H%M%S")backup_folder = os.path.join(backup_directory, f"backup_{timestamp}")os.makedirs(backup_folder)# 复制文件for filename in os.listdir(source_directory):source_file = os.path.join(source_directory, filename)destination_file = os.path.join(backup_folder, filename)shutil.copy2(source_file, destination_file)print("文件备份成功!")except FileNotFoundError as e:print(f"文件或目录未找到: {e}")except ValueError as e:print(f"配置文件错误: {e}")except Exception as e:print(f"发生未知错误: {e}")# if __name__ == "__main__":
#     backup_files()###
###统计数据
import tkinter as tk
from tkinter import filedialog
import collectionsdef count_words_and_lines(file_path):try:word_counter = collections.Counter()line_count = 0with open(file_path, "r", encoding="utf-8") as file:for line in file:line_count += 1words = line.split()word_counter.update(words)total_word_count = sum(word_counter.values())return line_count, total_word_count, word_counterexcept FileNotFoundError:print(f"文件 {file_path} 未找到。")return 0, 0, collections.Counter()def select_file_and_count():root = tk.Tk()root.withdraw()file_path = filedialog.askopenfilename()if file_path:line_count, total_word_count, word_counter = count_words_and_lines(file_path)print(f"Lines: {line_count}, Total Words: {total_word_count}")print("每个单词的数量统计:")for word, count in word_counter.items():print(f"{word}: {count}")# 保存结果到 data statistics.txt 文件try:with open("data statistics.txt", "w", encoding="utf-8") as result_file:result_file.write(f"Lines: {line_count}, Total Words: {total_word_count}\n")result_file.write("每个单词的数量统计:\n")for word, count in word_counter.items():result_file.write(f"{word}: {count}\n")print("结果已保存到 data statistics.txt 文件。")except Exception as e:print(f"保存结果时出现错误: {e}")# if __name__ == "__main__":
#     select_file_and_count()###
###获取电脑硬件信息
import psutil
import tkinter as tk
from tkinter import messageboxdef get_computer_info():result = ""try:# CPU 信息cpu_freq = psutil.cpu_freq()cpu_count = psutil.cpu_count(logical=False)cpu_count_logical = psutil.cpu_count(logical=True)cpu_percent = psutil.cpu_percent(interval=1)result += f"CPU 信息:\n"result += f"  物理核心数: {cpu_count}\n"result += f"  逻辑核心数: {cpu_count_logical}\n"result += f"  当前频率: {cpu_freq.current} MHz\n"result += f"  使用率: {cpu_percent}%\n"except Exception as e:result += f"获取 CPU 信息时出错: {e}\n"try:# 内存信息memory_info = psutil.virtual_memory()swap_info = psutil.swap_memory()result += f"内存信息:\n"result += f"  总内存: {memory_info.total / (1024 * 1024 * 1024):.2f} GB\n"result += f"  已使用: {memory_info.used / (1024 * 1024 * 1024):.2f} GB\n"result += f"  可用内存: {memory_info.available / (1024 * 1024 * 1024):.2f} GB\n"result += f"  交换空间总大小: {swap_info.total / (1024 * 1024 * 1024):.2f} GB\n"result += f"  交换空间已使用: {swap_info.used / (1024 * 1024 * 1024):.2f} GB\n"except Exception as e:result += f"获取内存信息时出错: {e}\n"try:# 磁盘信息disk_info = psutil.disk_usage('/')disk_partitions = psutil.disk_partitions()result += f"磁盘信息:\n"result += f"  总容量: {disk_info.total / (1024 * 1024 * 1024):.2f} GB\n"result += f"  已使用: {disk_info.used / (1024 * 1024 * 1024):.2f} GB\n"result += f"  可用空间: {disk_info.free / (1024 * 1024 * 1024):.2f} GB\n"result += f"  分区信息:\n"for partition in disk_partitions:result += f"    设备: {partition.device}, 挂载点: {partition.mountpoint}, 文件系统: {partition.fstype}\n"except Exception as e:result += f"获取磁盘信息时出错: {e}\n"try:# 网络信息net_io_counters = psutil.net_io_counters()result += f"网络信息:\n"result += f"  发送字节数: {net_io_counters.bytes_sent}\n"result += f"  接收字节数: {net_io_counters.bytes_recv}\n"except Exception as e:result += f"获取网络信息时出错: {e}\n"# 保存结果到 cpu.txt 文件try:with open('cpu.txt', 'w') as file:file.write(result)except Exception as e:result += f"保存文件时出错: {e}\n"return result# if __name__ == "__main__":
#     root = tk.Tk()
#     root.withdraw()
#     info = get_computer_info()
#     messagebox.showinfo("电脑硬件信息", info)
#     root.mainloop()###
###获取电脑ip信息
import socket
import uuid
import platform
import subprocessdef get_ip_address():try:hostname = socket.gethostname()ip_address = socket.gethostbyname(hostname)return ip_addressexcept socket.gaierror:return "无法获取 IP 地址"def get_mac_address():mac = uuid.getnode()mac_hex = ':'.join(("%012X" % mac)[i:i + 2] for i in range(0, 12, 2))return mac_hexdef get_gateway():system = platform.system()try:if system == "Windows":result = subprocess.run(['ipconfig', '/all'], capture_output=True, text=True)output = result.stdoutfor line in output.splitlines():if "默认网关" in line:gateway = line.split(":")[-1].strip()return gatewayelif system == "Linux":result = subprocess.run(['ip', 'route'], capture_output=True, text=True)output = result.stdoutfor line in output.splitlines():if "default via" in line:gateway = line.split("via")[1].split()[0]return gatewayexcept Exception:passreturn "无法获取网关信息"def save_info_to_file(ip, mac, gateway):with open('computer.txt', 'w') as file:file.write(f"IP 地址: {ip}\n")file.write(f"MAC 地址: {mac}\n")file.write(f"网关信息: {gateway}\n")# if __name__ == "__main__":
#     ip = get_ip_address()
#     mac = get_mac_address()
#     gateway = get_gateway()
#     save_info_to_file(ip, mac, gateway)
#     print(f"IP 地址: {ip}")
#     print(f"MAC 地址: {mac}")
#     print(f"网关信息: {gateway}")###
###图片转换import tkinter as tk
from tkinter import filedialog, messagebox
from PIL import Image# def convert_image_format():
#     # 让用户选择输入图片
#     input_path = filedialog.askopenfilename(filetypes=[("Image files", "*.jpg;*.jpeg;*.png;*.bmp")])
#     if not input_path:
#         return
#
#     # 定义支持的图片格式
#     supported_formats = {
#         "JPEG": "JPEG",
#         "PNG": "PNG",
#         "BMP": "BMP"
#     }
#
#     # 创建一个新窗口用于选择输出格式
#     format_window = tk.Toplevel(root)
#     format_window.title("选择输出格式")
#
#     # 创建一个 StringVar 用于存储用户选择的格式
#     selected_format = tk.StringVar(format_window)
#     selected_format.set(list(supported_formats.keys())[0])
#
#     # 创建一个下拉菜单让用户选择输出格式
#     format_menu = tk.OptionMenu(format_window, selected_format, *supported_formats.keys())
#     format_menu.pack(pady=20)
#
#     def on_format_selected():
#         # 让用户选择保存路径
#         output_format = supported_formats[selected_format.get()]
#         output_path = filedialog.asksaveasfilename(defaultextension=f".{output_format.lower()}",
#                                                    filetypes=[(f"{output_format} files", f"*.{output_format.lower()}")])
#         if output_path:
#             try:
#                 img = Image.open(input_path)
#                 img.save(output_path, format=output_format)
#                 messagebox.showinfo("成功", "图片转换成功!")
#             except Exception as e:
#                 messagebox.showerror("错误", f"转换过程中出现错误: {e}")
#         format_window.destroy()
#
#     # 创建一个按钮用于确认选择的格式
#     select_button = tk.Button(format_window, text="确定", command=on_format_selected)
#     select_button.pack(pady=20)# 创建主窗口
# root = tk.Tk()
# root.title("图片格式转换工具")
#
# # 创建一个按钮用于触发转换操作
# convert_button = tk.Button(root, text="选择图片并转换", command=convert_image_format)
# convert_button.pack(pady=50)
#
# # 进入主事件循环
# root.mainloop()###
###文本内容搜索与替换脚本
import os
import tkinter as tk
from tkinter import filedialog, simpledialogdef search_and_replace():# 选择目录directory = filedialog.askdirectory()if not directory:return# 输入要搜索的文本search_text = simpledialog.askstring("输入搜索文本", "请输入要搜索的文本:")if not search_text:return# 输入要替换的文本replace_text = simpledialog.askstring("输入替换文本", "请输入要替换的文本:")if not replace_text:returnfor filename in os.listdir(directory):if filename.endswith(".txt"):file_path = os.path.join(directory, filename)try:with open(file_path, "r", encoding="utf-8") as file:content = file.read()new_content = content.replace(search_text, replace_text)with open(file_path, "w", encoding="utf-8") as file:file.write(new_content)except Exception as e:print(f"处理文件 {file_path} 时出错: {e}")# 创建主窗口
# root = tk.Tk()
# root.title("文本搜索与替换工具")
#
# # 创建按钮
# button = tk.Button(root, text="开始搜索与替换", command=search_and_replace)
# button.pack(pady=20)
#
# # 进入主事件循环
# root.mainloop()###
###获取网页内容脚本
import requests
from bs4 import BeautifulSoupdef get_webpage_content(url):try:response = requests.get(url)response.raise_for_status()  # 检查请求是否成功soup = BeautifulSoup(response.content, "html.parser")# 假设我们要获取网页中的所有标题标签titles = soup.find_all("h1")# 打开文件以写入模式with open('web.txt', 'w', encoding='utf-8') as file:for title in titles:title_text = title.textprint(title_text)# 将标题文本写入文件file.write(title_text + '\n')print("内容已成功保存到 web.txt 文件中。")except requests.RequestException as e:print(f"请求网页时出现错误: {e}")except Exception as e:print(f"发生未知错误: {e}")# if __name__ == "__main__":
#     # 获取用户输入的网址
#     url = input("请输入要抓取内容的网站 URL: ")
#     get_webpage_content(url)###
###文件分类脚本
import os
import shutil
from tkinter import Tk
from tkinter.filedialog import askdirectorydef classify_files(source_directories, destination_directory):for source_directory in source_directories:if not os.path.exists(source_directory):print(f"源目录 {source_directory} 不存在,跳过该目录。")continuefile_types = {}for filename in os.listdir(source_directory):file_path = os.path.join(source_directory, filename)if os.path.isfile(file_path):extension = os.path.splitext(filename)[1]if extension not in file_types:file_types[extension] = []file_types[extension].append(file_path)for extension, files in file_types.items():destination_folder = os.path.join(destination_directory, extension[1:])os.makedirs(destination_folder, exist_ok=True)for file in files:base_name, ext = os.path.splitext(os.path.basename(file))new_name = base_name + extnew_path = os.path.join(destination_folder, new_name)counter = 1while os.path.exists(new_path):new_name = f"{base_name}_{counter}{ext}"new_path = os.path.join(destination_folder, new_name)counter += 1shutil.move(file, new_path)def read_source_directories(file_path):if not os.path.exists(file_path):print(f"未找到 {file_path} 文件,已为你创建该文件。请在文件中添加待整理的文件夹目录,每行一个目录。")with open(file_path, 'w', encoding='utf-8') as f:passreturn []with open(file_path, 'r', encoding='utf-8') as file:return [line.strip() for line in file.readlines() if line.strip()]# if __name__ == "__main__":
#     # 读取待整理的文件夹目录
#     pending_file = "Pending processing"
#     source_directories = read_source_directories(pending_file)
#
#     if not source_directories:
#         print("未找到有效的源目录,程序结束。")
#     else:
#         # 让用户选择处理后的文件放置的目标目录
#         root = Tk()
#         root.withdraw()
#         destination_directory = askdirectory(title="请选择处理后的文件放置的目标目录")
#         root.destroy()
#
#         if destination_directory:
#             classify_files(source_directories, destination_directory)
#         else:
#             print("未选择目标目录,程序结束。")

相关文章:

  • 十二,<FastApi>中间件
  • GCC 使用说明:常用参数详解与最佳实践
  • 66.加1
  • js中显示为[object Object]
  • linux下使用php修改php.ini的session.save_path无效的解决办法
  • 6.(vue3.x+vite)动态挂载组件并传递参数和方法
  • RK3588RK3576实现 HW-ID DTB(动态加载不同的Kernel DTB)功能
  • 使用基数树优化高并发内存池(替代加锁访问的哈希表和红黑树)
  • 通过导入 Excel 的方式复制文件或文件夹
  • 面试题:C++11在C++98基础上增加了哪些内容?
  • ChatUI 3.0 正式发布,“对话式交互” 开源组件库
  • MCP 协议知识分享
  • python scikit-learn中常用的数据集
  • LeetCode算法题(Go语言实现)_50
  • 什么是车规级MCU?STM32也能上车规级场景?
  • 模拟电路需要了解的一些基础知识(部分)
  • Dify部署过程中的错误和解决方案汇总
  • DeepSeek+大数据分析快速应用落地
  • ThinkPHP8可能遇到问题一:save保存时出现验证器的信息
  • Oracle--了解Oracle
  • 报社网站开发做什么/网络推广推广
  • 360建筑网在哪里/aso关键词优化工具
  • 手机移动网站设计/seo赚钱暴利
  • 建设网站需要学什么程序/网站优化推广招聘
  • 有没有做批发的网站/网站推广该怎么做
  • 哪个网站可以做链接/seo网络优化招聘