在当今数字世界,掌握编程就像获得了现代社会的超能力。而Python作为最流行的编程语言之一,以其简洁易学的语法和强大的生态系统,成为了许多人的首选。今天,我为你精心挑选了20个实用的Python脚本,它们将帮助你在日常工作和生活中解决各种问题,仿佛拥有了真正的"超能力"。
文件处理超能力
1. 批量重命名文件
import os
def batch_rename(directory, old_ext, new_ext):
for filename in os.listdir(directory):
if filename.endswith(old_ext):
new_name=filename.replace(old_ext, new_ext)
os.rename(
os.path.join(directory, filename),
os.path.join(directory, new_name)
)
print(f"完成:将所有{old_ext}文件重命名为{new_ext}")
# 使用示例:将目录中所有.txt文件重命名为.md文件
batch_rename("./documents", ".txt", ".md")
2. 文件夹监控器
import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
class MyHandler(FileSystemEventHandler):
def on_modified(self, event):
print(f"检测到变化: {event.src_path}")
def monitor_folder(path):
event_handler=MyHandler()
observer=Observer()
observer.schedule(event_handler, path, recursive=True)
observer.start()
try:
print(f"开始监控文件夹: {path}")
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
# 使用示例:监控下载文件夹的变化
monitor_folder("./downloads")
数据处理超能力
3. CSV数据分析器
import pandas as pd
import matplotlib.pyplot as plt
def analyze_csv(file_path):
# 读取CSV
df=pd.read_csv(file_path)
# 基本统计信息
print("数据概览:")
print(df.describe())
# 数据可视化
for column in df.select_dtypes(include=['number']).columns:
plt.figure(figsize=(10, 6))
plt.hist(df[column], bins=20)
plt.
title(f"{column}分布")
plt.savefig(f"{column}_distribution.png")
print(f"已生成{column}数据分布图")
returndf
# 使用示例
data=analyze_csv("sales_data.csv")
4. Excel文件合并器
import pandas as pd
import glob
def merge_excel_files(directory, output_file):
all_dfs= []
for excel_file in glob.glob(f"{directory}/*.xlsx"):
df=pd.read_excel(excel_file)
df['Source'] =excel_file # 添加来源文件标识
all_dfs.append(df)
# 合并所有数据框
merged_df=pd.concat(all_dfs,
ignore_index=True)
# 保存到新的Excel文件
merged_df.to_excel(output_file, index=False)
print(f"已将{len(all_dfs)}个Excel文件合并到{output_file}")
# 使用示例
merge_excel_files("./monthly_reports", "annual_report.xlsx")
网络超能力
5. 网站监控器
import requests
import time
from datetime import datetime
def monitor_website(url, interval=60, timeout=5):
while True:
try:
start_time=time.time()
response=requests.get(url, timeout=timeout)
elapsed_time=time.time() -start_time
timestamp=datetime.now().strftime("%Y-%m-%d %H:%M:%S")
status=response.status_code
print(f"{timestamp} - 状态: {status}, 响应时间: {elapsed_time:.2f}秒")
if status!=200:
print(f"警告: 网站返回状态码 {status}!")
except requests.RequestException as e:
print(f"错误: {e}")
time.sleep(interval)
# 使用示例:每分钟检查一次网站状态
monitor_website("https://example.com")
6. 批量下载器
import requests
import os
def download_files(urls, destination_folder):
if not os.path.exists
(destination_folder):
os.makedirs(destination_folder)
for url in urls:
filename=url.split("/")[-1]
filepath=os.path.join(destination_folder, filename)
print(f"正在下载: {url}")
response=requests.get(url, stream=True)
with open(filepath, "wb") as file:
for chunk in response.iter_content(chunk_size=1024):
if chunk:
file.write(chunk)
print(f"已下载: {filename}")
# 使用示例
urls= [
"https://example.com/file1.pdf",
"https://example.com/file2.pdf",
"https://example.com/file3.pdf"
]
download_files
(urls, "./downloads")
自动化超能力
7. 定时任务执行器
import schedule
import time
def job():
print("执行定时任务...")
# 在这里添加你想要执行的代码
def setup_scheduler():
# 每天上午10点执行
schedule.every().day.at("10:00").do(job)
# 每小时执行一次
schedule.every().hour.do(job)
# 每周一执行
schedule.every().monday.do(job)
print("定时任务已设置,等待执行...")
while True:
schedule.run_pending()
time.sleep(1)
# 开始定时任务
setup_scheduler()
8. 邮件自动发送器
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
def send_email(sender, recipient, subject, body, password, smtp_server="smtp.gmail.com", smtp_port=587):
# 创建邮件对象
msg=MIMEMultipart()
msg['From'] =sender
msg['To'] =recipient
msg['Subject'] =subject
# 添加邮件正文
msg.attach(MIMEText(body, 'plain'))
# 连接到SMTP服务器并发送邮件
try:
server=smtplib.SMTP(smtp_server, smtp_port)
server.starttls()
server.login(sender, password)
text=msg.as_string()
server.sendmail(sender, recipient, text)
server.quit()
print("邮件发送成功!")
except Exceptionase:
print(f"邮件发送失败: {e}")
# 使用示例
send_email(
"your_email@gmail.com",
"recipient@example.com",
"Python自动邮件",
"这是一封由Python脚本自动发送的邮件。",
"your_password"
)
文本处理超能力
9. PDF文本提取器
import PyPDF2
def extract_text_from_pdf(pdf_path):
text = ""
with open(pdf_path, "rb") as file:
reader = PyPDF2.PdfReader(file)
num_pages = len(reader.pages)
print(f"PDF共有{num_pages}页")
for page_num in range(num_pages):
page = reader.pages[page_num]
text += page.extract_text()
return text
# 使用示例
pdf_text = extract_text_from_pdf("document.pdf")
print(f"提取的文本前500个字符:\n{pdf_text[:500]}...")
10. 文本摘要生成器
from gensim.summarization import summarize
def generate_summary(text, ratio=0.2):
# 生成文本摘要
summary = summarize(text, ratio=ratio)
return summary
# 使用示例
text = """这里是一段很长的文本内容..."""
summary = generate_summary(text)
print(f"原文长度: {len(text)}字符")
print(f"摘要长度: {len(summary)}字符")
print(f"摘要内容:\n{summary}")
图像处理超能力
11. 图像批量处理器
from PIL import Image, ImageEnhance
import os
def batch_process_images(input_dir, output_dir, brightness=1.5, contrast=1.2, size=(800, 600)):
if not os.path.exists(output_dir):
os.makedirs(output_dir)
for filename in os.listdir(input_dir):
if filename.lower().endswith(('.png', '.jpg', '.jpeg')):
input_path = os.path.join(input_dir, filename)
output_path = os.path.join(output_dir, f"processed_{filename}")
try:
# 打开图像
img = Image.open(input_path)
# 调整大小
img = img.resize(size, Image.LANCZOS)
# 增强亮度
enhancer = ImageEnhance.Brightness(img)
img = enhancer.enhance(brightness)
# 增强对比度
enhancer = ImageEnhance.Contrast(img)
img = enhancer.enhance(contrast)
# 保存处理后的图像
img.save(output_path)
print(f"已处理: {filename}")
except Exception as e:
print(f"处理{filename}时出错: {e}")
# 使用示例
batch_process_images("./images", "./processed_images")
12. 图像水印添加器
from PIL import Image, ImageDraw, ImageFont
import os
def add_watermark(input_dir, output_dir, watermark_text, font_size=50, opacity=50):
if not os.path.exists(output_dir):
os.makedirs(output_dir)
# 设置字体,使用默认
try:
font = ImageFont.truetype("arial.ttf", font_size)
except:
font = ImageFont.load_default()
for filename in os.listdir(input_dir):
if filename.lower().endswith(('.png', '.jpg', '.jpeg')):
input_path = os.path.join(input_dir, filename)
output_path = os.path.join(output_dir, f"watermarked_{filename}")
# 打开原始图像
img = Image.open(input_path).convert("RGBA")
# 创建水印层
watermark = Image.new("RGBA", img.size, (0, 0, 0, 0))
draw = ImageDraw.Draw(watermark)
# 计算水印位置(居中)
width, height = img.size
text_width, text_height = draw.textsize(watermark_text, font=font)
x = (width - text_width) // 2
y = (height - text_height) // 2
# 绘制水印
draw.text((x, y), watermark_text, font=font, fill=(255, 255, 255, opacity))
# 合并原图和水印
watermarked_img = Image.alpha_composite(img, watermark)
watermarked_img.convert("RGB").save(output_path)
print(f"已添加水印: {filename}")
# 使用示例
add_watermark("./images", "./watermarked", "© 版权所有")
数据可视化超能力
13. 数据可视化生成器
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
def visualize_data(data_file):
# 读取数据
df = pd.read_csv(data_file)
# 创建可视化目录
os.makedirs("visualizations", exist_ok=True)
# 生成多种可视化
# 1. 折线图
plt.figure(figsize=(12, 6))
for column in df.select_dtypes(include=[np.number]).columns[:5]: # 最多绘制5列
plt.plot(df.index, df[column], label=column)
plt.legend()
plt.title("数据趋势分析")
plt.savefig("visualizations/trend_analysis.png")
# 2. 散点图矩阵
pd.plotting.scatter_matrix(df.select_dtypes(include=[np.number]).iloc[:, :4],
figsize=(12, 12))
plt.savefig("visualizations/scatter_matrix.png")
# 3. 相关性热图
plt.figure(figsize=(10, 8))
corr = df.select_dtypes(include=[np.number]).corr()
plt.imshow(corr, cmap='coolwarm')
plt.colorbar()
plt.xticks(range(len(corr.columns)), corr.columns, rotation=90)
plt.yticks(range(len(corr.columns)), corr.columns)
plt.title("相关性分析")
plt.savefig("visualizations/correlation_heatmap.png")
print("已生成数据可视化图表,保存在visualizations目录")
# 使用示例
visualize_data("sales_data.csv")
14. 实时数据监控仪表板
import dash
from dash import dcc, html
from dash.dependencies import Input, Output
import plotly.express as px
import pandas as pd
import random
# 模拟实时数据
def get_data():
return pd.DataFrame({
'time': pd.date_range(start='2023-01-01', periods=20, freq='H'),
'value': [random.normalvariate(100, 15) for _ in range(20)]
})
# 创建Dash应用
app = dash.Dash(__name__)
app.layout = html.Div([
html.H1("实时数据监控仪表板"),
dcc.Graph(id='live-graph'),
dcc.Interval(
id='interval-component',
interval=5*1000, # 每5秒更新一次
n_intervals=0
)
])
@app.callback(
Output('live-graph', 'figure'),
Input('interval-component', 'n_intervals')
)
def update_graph(n):
df = get_data()
fig = px.line(df, x='time', y='value', title='实时数据流')
return fig
if __name__ == '__main__':
app.run_server(debug=True)
机器学习超能力
15. 简易图像分类器
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
import numpy as np
from PIL import Image
import os
def create_image_classifier(data_dir):
# 加载数据
X = [] # 图像数据
y = [] # 标签
for label in os.listdir(data_dir):
label_dir = os.path.join(data_dir, label)
if os.path.isdir(label_dir):
for image_file in os.listdir(label_dir):
if image_file.lower().endswith(('.png', '.jpg', '.jpeg')):
image_path = os.path.join(label_dir, image_file)
try:
# 打开并调整图像大小
img = Image.open(image_path).convert('RGB').resize((50, 50))
# 将图像转换为特征向量
features = np.array(img).flatten()
X.append(features)
y.append(label)
except Exception as e:
print(f"处理{image_path}时出错: {e}")
# 转换为numpy数组
X = np.array(X)
y = np.array(y)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 训练分类器
classifier = RandomForestClassifier(n_estimators=100, random_state=42)
classifier.fit(X_train, y_train)
# 评估模型
accuracy = classifier.score(X_test, y_test)
print(f"模型准确率: {accuracy:.2f}")
return classifier
# 使用示例(假设有一个包含不同类别图像的数据目录)
model = create_image_classifier("./image_dataset")
16. 文本情感分析器
from textblob import TextBlob
def analyze_sentiment(text):
# 创建TextBlob对象
blob = TextBlob(text)
# 获取情感极性(-1到1之间,负值表示负面情感,正值表示正面情感)
polarity = blob.sentiment.polarity
# 获取主观性(0到1之间,0表示客观,1表示主观)
subjectivity = blob.sentiment.subjectivity
# 情感分类
if polarity > 0.1:
sentiment = "正面"
elif polarity < -0.1:
sentiment = "负面"
else:
sentiment = "中性"
return {
"原文": text,
"情感极性": polarity,
"主观性": subjectivity,
"情感分类": sentiment
}
# 使用示例
texts = [
"我非常喜欢这个产品,它太棒了!",
"这个服务真的很差,让我很失望。",
"这只是一个普通的产品,没有特别之处。"
]
for text in texts:
result = analyze_sentiment(text)
print(f"文本:{result['原文']}")
print(f"情感分类:{result['情感分类']}")
print(f"情感极性:{result['情感极性']:.2f}")
print(f"主观性:{result['主观性']:.2f}")
print("-" * 40)
系统管理超能力
17. 系统健康监控器
import psutil
import time
import datetime
def monitor_system_health(interval=5, duration=60):
end_time = time.time() + duration
print("开始监控系统健康...")
print("按Ctrl+C停止")
try:
while time.time() < end_time:
# 获取当前时间
current_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
# 获取CPU使用率
cpu_percent = psutil.cpu_percent(interval=1)
# 获取内存使用情况
memory = psutil.virtual_memory()
memory_percent = memory.percent
# 获取磁盘使用情况
disk = psutil.disk_usage('/')
disk_percent = disk.percent
# 获取网络信息
net_io = psutil.net_io_counters()
# 输出信息
print(f"时间: {current_time}")
print(f"CPU使用率: {cpu_percent}%")
print(f"内存使用率: {memory_percent}%")
print(f"磁盘使用率: {disk_percent}%")
print(f"网络发送: {net_io.bytes_sent / 1024 / 1024:.2f} MB")
print(f"网络接收: {net_io.bytes_recv / 1024 / 1024:.2f} MB")
print("-" * 40)
time.sleep(interval)
except KeyboardInterrupt:
print("监控已停止")
# 使用示例:监控系统健康状态,每5秒更新一次,持续60秒
monitor_system_health()
18. 文件备份脚本
import shutil
import os
import datetime
def backup_files(source_dir, backup_dir, create_date_subdir=True):
# 检查源目录是否存在
if not os.path.exists(source_dir):
print(f"错误: 源目录 {source_dir} 不存在")
return
# 创建备份目录(如果不存在)
if not os.path.exists(backup_dir):
os.makedirs(backup_dir)
# 如果需要创建日期子目录
if create_date_subdir:
current_date = datetime.datetime.now().strftime("%Y-%m-%d")
backup_subdir = os.path.join(backup_dir, current_date)
if not os.path.exists(backup_subdir):
os.makedirs(backup_subdir)
target_dir = backup_subdir
else:
target_dir = backup_dir
# 执行备份
try:
# 获取源目录中的所有文件和子目录
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.isdir(source_item):
shutil.copytree(source_item, target_item, dirs_exist_ok=True)
print(f"已备份目录: {item}")
# 如果是文件,则直接复制
else:
shutil.copy2(source_item, target_item)
print(f"已备份文件: {item}")
print(f"备份完成! 所有文件已备份到: {target_dir}")
except Exception as e:
print(f"备份过程中出错: {e}")
# 使用示例:备份当前目录下的documents文件夹到backups目录
backup_files("./documents", "./backups")
娱乐与创意超能力
19. 随机密码生成器
import random
import string
def generate_password(length=12, include_digits=True, include_special=True):
# 定义字符集
chars = string.ascii_letters # 字母
if include_digits:
chars += string.digits # 数字
if include_special:
chars += string.punctuation # 特殊字符
# 生成密码
password = ''.join(random.choice(chars) for _ in range(length))
# 确保密码至少包含一个大写字母、小写字母、数字和特殊字符
has_upper = any(c.isupper() for c in password)
has_lower = any(c.islower() for c in password)
has_digit = any(c.isdigit() for c in password) if include_digits else True
has_special = any(c in string.punctuation for c in password) if include_special else True
# 如果不满足条件,重新生成
if not (has_upper and has_lower and has_digit and has_special):
return generate_password(length, include_digits, include_special)
return password
# 使用示例
for _ in range(5):
pwd = generate_password()
print(f"随机密码: {pwd}")
20. 音乐可视化器
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from scipy.io import wavfile
import os
def visualize_music(audio_file, output_dir="./music_viz"):
# 创建输出目录
if not os.path.exists(output_dir):
os.makedirs(output_dir)
# 读取音频文件
sample_rate, audio_data = wavfile.read(audio_file)
# 如果是立体声,取平均转为单声道
if len(audio_data.shape) > 1:
audio_data = np.mean(audio_data, axis=1)
# 标准化音频数据
audio_data = audio_data / (2.0 ** 15)
# 创建时间数组
duration = len(audio_data) / sample_rate
time = np.linspace(0., duration, len(audio_data))
# 创建图表
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(12, 8))
# 波形图
ax1.plot(time, audio_data, color='blue')
ax1.set_title('音频波形')
ax1.set_xlabel('时间 (秒)')
ax1.set_ylabel('振幅')
# 计算频谱
spec, freqs, t, im = ax2.specgram(audio_data, NFFT=1024, Fs=sample_rate,
noverlap=512, cmap='viridis')
ax2.set_title('频谱图')
ax2.set_xlabel('时间 (秒)')
ax2.set_ylabel('频率 (Hz)')
plt.tight_layout()
# 保存图像
output_file = os.path.join(output_dir, os.path.basename(audio_file).replace('.wav', '.png'))
plt.savefig(output_file)
print(f"已生成音乐可视化: {output_file}")
# 显示图像
plt.show()
# 使用示例(需要一个WAV格式的音频文件)
visualize_music("music.wav")
这20个Python脚本展示了Python编程的多样性和强大功能。通过掌握这些脚本,你可以:
自动化处理日常重复任务
分析和可视化各种数据
监控系统和网站性能
处理和转换各种文件格式
创建智能应用程序
最重要的是,这些脚本可以根据你的具体需求进行修改和扩展,赋予你更强大的"编程超能力"。无论你是初学者还是有经验的程序员,这些脚本都能帮助你更高效地解决问题,节省时间,创造价值。
开始尝试这些脚本吧,发现Python的强大魅力!
对Python,AI,自动化办公提效,副业发展等感兴趣的伙伴们,扫码添加逍遥,限免交流群
备注【成长交流】