Python实战项目:结合while循环和time模块的15个创意应用

embedded/2024/11/14 3:59:40/

Python 的 while 循环和 time 模块是非常实用的工具,可以用来创建各种有趣的应用。今天我们就来探索一下如何将这两个工具结合起来,实现一些创意十足的小项目。从简单的倒计时器到复杂的自动化任务,我们会一步步引导你完成这些项目。

1. 倒计时器

首先,我们来做一个简单的倒计时器。这个项目会从用户输入的时间开始倒数,直到时间结束。

import time# 获取用户输入的时间(秒)
seconds = int(input("请输入倒计时的秒数: "))while seconds > 0:print(f"倒计时: {seconds} 秒")time.sleep(1)  # 暂停1秒seconds -= 1print("时间到!")

解释

  • input() 函数获取用户输入的时间。

  • while 循环在 seconds 大于 0 时继续执行。

  • time.sleep(1) 让程序暂停1秒。

  • 每次循环后,seconds 减少1,直到为0。

2. 进度条

接下来,我们做一个进度条,显示任务的完成进度。

import timetotal_steps = 100
step = 0while step <= total_steps:percent = (step / total_steps) * 100bar = ('=' * int(percent / 2)).ljust(50)print(f"[{bar}] {percent:.2f}%", end='\r')time.sleep(0.1)  # 模拟任务处理时间step += 1print("\n任务完成!")

解释

  • total_steps 定义总步数。

  • while 循环在 step 小于等于 total_steps 时继续执行。

  • percent 计算当前进度的百分比。

  • bar 创建进度条字符串。

  • end='\r' 让输出在同一行更新。

  • time.sleep(0.1) 模拟任务处理时间。

3. 简易闹钟

我们可以用 while 循环和 time 模块制作一个简易闹钟。

import time# 获取用户输入的闹钟时间(格式:HH:MM)
alarm_time = input("请输入闹钟时间 (HH:MM): ")
current_time = time.strftime("%H:%M")while current_time != alarm_time:current_time = time.strftime("%H:%M")time.sleep(1)print("闹钟响了!")

解释

  • input() 获取用户输入的闹钟时间。

  • time.strftime("%H:%M") 获取当前时间。

  • while 循环在当前时间不等于闹钟时间时继续执行。

  • time.sleep(1) 每秒检查一次时间。

4. 自动刷新网页

如果你需要定期刷新某个网页,可以用 selenium 库结合 while 循环和 time 模块来实现。

from selenium import webdriver
import time# 启动浏览器
driver = webdriver.Chrome()url = "https://www.example.com"
refresh_interval = 60  # 刷新间隔(秒)while True:driver.get(url)print("页面已刷新")time.sleep(refresh_interval)

解释

  • webdriver.Chrome() 启动 Chrome 浏览器。

  • driver.get(url) 打开指定的网页。

  • while True 无限循环。

  • time.sleep(refresh_interval) 每隔一段时间刷新一次页面。

5. 数据采集

使用 requests 库和 while 循环,可以定期从某个网站抓取数据。

import requests
import timeurl = "https://api.example.com/data"
interval = 30  # 抓取间隔(秒)while True:response = requests.get(url)if response.status_code == 200:data = response.json()print(data)else:print("请求失败")time.sleep(interval)

解释

  • requests.get(url) 发送 HTTP GET 请求。

  • response.status_code 检查响应状态码。

  • response.json() 解析 JSON 格式的数据。

  • time.sleep(interval) 每隔一段时间抓取一次数据。

6. 自动发送邮件

使用 smtplibemail 库,结合 while 循环和 time 模块,可以定期发送邮件。

import smtplib
from email.mime.text import MIMEText
import timesender = 'your_email@example.com'
receiver = 'receiver_email@example.com'
password = 'your_password'
subject = '定期邮件'
body = '这是一封定期发送的邮件。'msg = MIMEText(body)
msg['From'] = sender
msg['To'] = receiver
msg['Subject'] = subjectserver = smtplib.SMTP('smtp.example.com', 587)
server.starttls()
server.login(sender, password)send_interval = 3600  # 发送间隔(秒)while True:server.sendmail(sender, receiver, msg.as_string())print("邮件已发送")time.sleep(send_interval)

解释

  • MIMEText 创建邮件内容。

  • smtplib.SMTP 连接 SMTP 服务器。

  • server.starttls() 启用 TLS 加密。

  • server.login() 登录邮箱。

  • server.sendmail() 发送邮件。

  • time.sleep(send_interval) 每隔一段时间发送一次邮件。

7. 自动备份文件

可以定期备份文件,确保数据安全。

import shutil
import time
import ossource_file = 'path/to/source/file.txt'
backup_dir = 'path/to/backup/directory'
backup_interval = 3600  # 备份间隔(秒)if not os.path.exists(backup_dir):os.makedirs(backup_dir)while True:backup_file = os.path.join(backup_dir, f"backup_{int(time.time())}.txt")shutil.copy(source_file, backup_file)print(f"文件已备份到 {backup_file}")time.sleep(backup_interval)

解释

  • shutil.copy() 复制文件。

  • os.path.join() 拼接备份文件路径。

  • os.makedirs() 创建备份目录。

  • time.time() 获取当前时间戳。

  • time.sleep(backup_interval) 每隔一段时间备份一次文件。

8. 实时监控系统资源

使用 psutil 库,可以实时监控系统的 CPU 和内存使用情况。

import psutil
import timecheck_interval = 5  # 监控间隔(秒)while True:cpu_usage = psutil.cpu_percent(interval=1)memory_usage = psutil.virtual_memory().percentprint(f"CPU 使用率: {cpu_usage}%")print(f"内存使用率: {memory_usage}%")time.sleep(check_interval)

解释

  • psutil.cpu_percent(interval=1) 获取 CPU 使用率。

  • psutil.virtual_memory().percent 获取内存使用率。

  • time.sleep(check_interval) 每隔一段时间检查一次系统资源。

9. 自动下载文件

可以定期从某个 URL 下载文件。

import requests
import time
import osurl = "https://example.com/file.zip"
download_dir = 'path/to/download/directory'
download_interval = 3600  # 下载间隔(秒)if not os.path.exists(download_dir):os.makedirs(download_dir)while True:file_name = os.path.join(download_dir, f"file_{int(time.time())}.zip")response = requests.get(url)if response.status_code == 200:with open(file_name, 'wb') as file:file.write(response.content)print(f"文件已下载到 {file_name}")else:print("下载失败")time.sleep(download_interval)

解释

  • requests.get(url) 发送 HTTP GET 请求。

  • response.content 获取文件内容。

  • with open(file_name, 'wb') as file 写入文件。

  • time.sleep(download_interval) 每隔一段时间下载一次文件。

10. 自动重启服务

如果某个服务挂了,可以自动重启它。

import subprocess
import timeservice_name = 'your_service'
check_interval = 60  # 检查间隔(秒)while True:result = subprocess.run(['systemctl', 'is-active', service_name], capture_output=True, text=True)if 'inactive' in result.stdout:subprocess.run(['systemctl', 'start', service_name])print(f"{service_name} 已重启")else:print(f"{service_name} 正在运行")time.sleep(check_interval)

解释

  • subprocess.run() 执行系统命令。

  • capture_output=True 捕获命令输出。

  • text=True 以文本形式返回输出。

  • time.sleep(check_interval) 每隔一段时间检查一次服务状态。

11. 自动更新软件

可以定期检查并更新软件。

import subprocess
import timeupdate_command = 'sudo apt update && sudo apt upgrade -y'
check_interval = 3600  # 检查间隔(秒)while True:subprocess.run(update_command, shell=True)print("软件已更新")time.sleep(check_interval)

解释

  • subprocess.run(update_command, shell=True) 执行更新命令。

  • time.sleep(check_interval) 每隔一段时间更新一次软件。

12. 自动清理日志文件

定期清理日志文件,防止磁盘空间被占满。

import os
import timelog_dir = 'path/to/log/directory'
cleanup_interval = 3600  # 清理间隔(秒)while True:for file_name in os.listdir(log_dir):file_path = os.path.join(log_dir, file_name)if os.path.isfile(file_path):os.remove(file_path)print(f"已删除 {file_path}")time.sleep(cleanup_interval)

解释

  • os.listdir(log_dir) 获取日志目录中的文件列表。

  • os.path.join(log_dir, file_name) 拼接文件路径。

  • os.remove(file_path) 删除文件。

  • time.sleep(cleanup_interval) 每隔一段时间清理一次日志文件。

13. 自动同步文件夹

可以定期同步两个文件夹的内容。

import shutil
import time
import ossource_dir = 'path/to/source/directory'
target_dir = 'path/to/target/directory'
sync_interval = 3600  # 同步间隔(秒)if not os.path.exists(target_dir):os.makedirs(target_dir)while True:for item in os.listdir(source_dir):source_item = os.path.join(source_dir, item)target_item = os.path.join(target_dir, item)if os.path.isfile(source_item):shutil.copy(source_item, target_item)print(f"已同步 {source_item} 到 {target_item}")elif os.path.isdir(source_item):shutil.copytree(source_item, target_item)print(f"已同步 {source_item} 到 {target_item}")time.sleep(sync_interval)

解释

  • shutil.copy() 复制文件。

  • shutil.copytree() 复制目录。

  • time.sleep(sync_interval) 每隔一段时间同步一次文件夹。

14. 自动发送短信

使用 twilio 库,可以定期发送短信。

from twilio.rest import Client
import timeaccount_sid = 'your_account_sid'
auth_token = 'your_auth_token'
client = Client(account_sid, auth_token)to_phone_number = '+1234567890'
from_phone_number = '+0987654321'
message_body = '这是一条定期发送的短信。'
send_interval = 3600  # 发送间隔(秒)while True:message = client.messages.create(to=to_phone_number,from_=from_phone_number,body=message_body)print(f"短信已发送,消息ID: {message.sid}")time.sleep(send_interval)

解释

  • Client(account_sid, auth_token) 创建 Twilio 客户端。

  • client.messages.create() 发送短信。

  • time.sleep(send_interval) 每隔一段时间发送一次短信。

15. 自动记录系统事件

可以定期记录系统事件,方便后续分析。

import logging
import timelog_file = 'path/to/log/file.log'
log_interval = 60  # 记录间隔(秒)logging.basicConfig(filename=log_file, level=logging.INFO, format='%(asctime)s - %(message)s')while True:logging.info("系统正常运行")time.sleep(log_interval)

解释

  • logging.basicConfig() 配置日志记录。

  • logging.info() 记录日志信息。

  • time.sleep(log_interval) 每隔一段时间记录一次系统事件。

实战案例:自动备份数据库

假设你有一个 MySQL 数据库,需要定期备份。我们可以结合 while 循环和 time 模块来实现这个功能。

import os
import time
import subprocessdb_host = 'localhost'
db_user = 'root'
db_password = 'your_password'
db_name = 'your_database'
backup_dir = 'path/to/backup/directory'
backup_interval = 3600  # 备份间隔(秒)if not os.path.exists(backup_dir):os.makedirs(backup_dir)while True:timestamp = int(time.time())backup_file = os.path.join(backup_dir, f"{db_name}_{timestamp}.sql")# 构建 mysqldump 命令dump_cmd = f"mysqldump -h {db_host} -u {db_user} -p{db_password} {db_name} > {backup_file}"# 执行备份命令subprocess.run(dump_cmd, shell=True)print(f"数据库已备份到 {backup_file}")time.sleep(backup_interval)

解释

  • os.makedirs(backup_dir) 创建备份目录。

  • timestamp 获取当前时间戳。

  • dump_cmd 构建 mysqldump 命令。

  • subprocess.run(dump_cmd, shell=True) 执行备份命令。

  • time.sleep(backup_interval) 每隔一段时间备份一次数据库

总结

本文介绍了如何结合 while 循环和 time 模块实现15个创意应用,包括倒计时器、进度条、简易闹钟、自动刷新网页、数据采集、自动发送邮件、自动备份文件、实时监控系统资源、自动下载文件、自动重启服务、自动更新软件、自动清理日志文件、自动同步文件夹、自动发送短信、自动记录系统事件,以及一个实战案例:自动备份数据库


http://www.ppmy.cn/embedded/137063.html

相关文章

【在Typora中绘制用户旅程图和甘特图】

在 Typora 中可以使用 Mermaid 绘制用户旅程图&#xff08;User Journey Map&#xff09;&#xff0c;但由于 Mermaid 并不直接支持用户旅程图&#xff0c;我们可以通过一些图表的变通方式&#xff08;比如流程图或甘特图&#xff09;来表示用户旅程图的结构。用户旅程图通常展…

Oracle 外键

外键用于与另一张表的关联。是能确定另一张表记录的字段&#xff0c;用于保持数据的一致性 Oracle 外键创建 在Oracle数据库中&#xff0c;外键是强制实施参照完整性的一种方式&#xff0c;使用外键就意味着一个表中的值在另一个表中也必须出现。 被引用的表称为父表&#xff…

2024美亚个人

检材链接(来自美亚官方):https://pan.baidu.com/s/1ajsVB_15aJ4mzTvd5rHSkQ?pwd=pv1h 容器密码:eS2%u@q#hake2#Z@6LWpQ8^T(R7cg95m\Bv+y;$=/dqxYnEusFf)tb>:HKHwy+e%cR\r=9j:GsK)AV52/3hXfdv8#u7a6JQ^pz><YPNkq*!& 检材列表 Emma的iOS手机镜像档案(Emma_Mo…

后台管理系统窗体程序:文章管理 > 文章列表

目录 文章列表的的功能介绍&#xff1a; 1、进入页面 2、页面内的各种功能设计 &#xff08;1&#xff09;文章表格 &#xff08;2&#xff09;删除按钮 &#xff08;3&#xff09;编辑按钮 &#xff08;4&#xff09;发表文章按钮 &#xff08;5&#xff09;所有分类下拉框 &a…

前端入门一之JS对象、字符串对象、数组对象、Data()对象等

前言 JS是前端三件套之一&#xff0c;也是核心&#xff0c;本人将会更新JS基础、JS对象、DOM、BOM、ES6等知识点&#xff0c;这篇是JS常用的内置对象;这篇文章是本人大一学习前端的笔记&#xff1b;欢迎点赞 收藏 关注&#xff0c;本人将会持续更新。 文章目录 目录总览1、对…

Python、selenium 自动化 - 实现自动上传外部文件

点击windows窗口版 直接上代码 from selenium import webdriver from selenium.webdriver.common.by import By from pywinauto import Desktop# 配置 option webdriver.ChromeOptions() option.add_experimental_option("debuggerAddress", "127.0.0.1:9222…

uniapp—android原生插件开发(1环境准备)

本篇文章从实战角度出发&#xff0c;将UniApp集成新大陆PDA设备RFID的全过程分为四部曲&#xff0c;涵盖环境搭建、插件开发、AAR打包、项目引入和功能调试。通过这份教程&#xff0c;轻松应对安卓原生插件开发与打包需求&#xff01; 项目背景&#xff1a; UniApp集成新大陆P…

Web3 游戏周报(11.03 - 11.09)

回顾上周的区块链游戏概况&#xff0c;查看 Footprint Analytics 与 ABGA 最新发布的数据报告。 【11.03 - 11.09】Web3 游戏行业动态&#xff1a; Ton Accelerator 推出名为「Synergy」的 500 万美元计划&#xff0c;旨在推动跨链创新&#xff0c;创造 TON 用户与 EVM 网络适应…