社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

20个Python编程脚本,让你拥有超能力

A逍遥之路 • 3 月前 • 123 次点击  

在当今数字世界,掌握编程就像获得了现代社会的超能力。而Python作为最流行的编程语言之一,以其简洁易学的语法和强大的生态系统,成为了许多人的首选。今天,我为你精心挑选了20个实用的Python脚本,它们将帮助你在日常工作和生活中解决各种问题,仿佛拥有了真正的"超能力"。

文件处理超能力

1. 批量重命名文件

import os

def batch_rename(directoryold_extnew_ext):
    for filename in os.listdir(directory):
        if filename.endswith(old_ext):
            new_name=filename.replace(old_extnew_ext)
            os.rename(
                os.path.join(directoryfilename),
                os.path.join(directorynew_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(selfevent):
        print(f"检测到变化: {event.src_path}")

def monitor_folder(path):
    event_handler=MyHandler()
    observer=Observer()
    observer.schedule(event_handlerpathrecursive=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=(106))
        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(directoryoutput_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_fileindex=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(urlinterval=60timeout=5):
    while True:
        try:
            start_time=time.time()
            response=requests.get(urltimeout=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(urlsdestination_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_folderfilename)
        
        print(f"正在下载: {url}")
        response=requests.get(urlstream=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(senderrecipientsubjectbodypasswordsmtp_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_serversmtp_port)
        server.starttls()
        server.login(senderpassword)
        text=msg.as_string()
        server.sendmail(senderrecipienttext)
        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知识日日补!






           对Python,AI,自动化办公提效,副业发展等感兴趣的伙伴们,扫码添加逍遥,限免交流群

备注【成长交流】

图片



Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/181725
 
123 次点击