20个Python自动化脚本,提升编程能力

大家好,使用Python编程一段时间后,或许对StackOverflow也变得熟悉,可能就会想要一些脚本来提升编程水平。本文将介绍20个实用的Python脚本,它们不仅能帮助提升能力,还能自动化那些看似不可能的任务,甚至解决未曾意识到的问题。

1.文件重复查找器

有时看着硬盘突然发现,只剩下一点点空间了,偷偷占用空间多数就是重复文件。以下是一个查找重复文件并将其删除的脚本,进而释放磁盘空间。

python 复制代码
import os
import hashlib

def hash_file(filename):
    h = hashlib.md5()
    with open(filename, 'rb') as file:
        while chunk := file.read(8192):
            h.update(chunk)
    return h.hexdigest()

def find_duplicates(folder):
    hashes = {}
    for dirpath, _, filenames in os.walk(folder):
        for f in filenames:
            full_path = os.path.join(dirpath, f)
            file_hash = hash_file(full_path)
            if file_hash in hashes:
                print(f"发现重复文件: {full_path} == {hashes[file_hash]}")
            else:
                hashes[file_hash] = full_path

find_duplicates('/path/to/your/folder')

不要在系统文件夹上盲目运行这个脚本,否则会引入一些混乱。在运行这个脚本后短时间内就会释放大量空间。

2.自动整理下载文件夹

如果下载文件夹十分混乱,影响正常的工作,这里有一个脚本可以自动整理文件:

python 复制代码
import os
import shutil

def organize_folder(folder):
    file_types = {
        '图片': ['.jpeg', '.jpg', '.png', '.gif'],
        '视频': ['.mp4', '.avi', '.mov'],
        '文档': ['.pdf', '.docx', '.txt'],
        '压缩包': ['.zip', '.rar']
    }

    for filename in os.listdir(folder):
        file_path = os.path.join(folder, filename)
        if os.path.isfile(file_path):
            ext = os.path.splitext(filename)[1].lower()
            for folder_name, extensions in file_types.items():
                if ext in extensions:
                    target_folder = os.path.join(folder, folder_name)
                    os.makedirs(target_folder, exist_ok=True)
                    shutil.move(file_path, os.path.join(target_folder, filename))
                    print(f'将 {filename} 移动到 {folder_name}')

organize_folder('/path/to/Downloads')

3.批量调整图像大小

如果要处理需要调整图像大小的项目,以下是轻松批量调整的方法:

python 复制代码
from PIL import Image
import os

def batch_resize(folder, width, height):
    for filename in os.listdir(folder):
        if filename.endswith(('.jpeg', '.jpg', '.png')):
            img = Image.open(os.path.join(folder, filename))
            img = img.resize((width, height))
            img.save(os.path.join(folder, f"resized_{filename}"))
            print(f'调整了 {filename} 的大小')

batch_resize('/path/to/images', 800, 600)

当你的老板希望 "5分钟内,我要这些图片都整整齐齐"的时候,它就是你的最佳选择。

4.实时天气通知器

实时获取最新天气预报,再也不用淋雨大步跑:

python 复制代码
import requests
import time

API_KEY = 'your_api_key'
CITY = 'New York'

def get_weather():
    url = f"http://api.openweathermap.org/data/2.5/weather?q={CITY}&appid={API_KEY}"
    response = requests.get(url)
    data = response.json()
    return data['weather'][0]['description'], data['main']['temp'] - 273.15

while True:
    weather, temp = get_weather()
    print(f"Current weather in {CITY}: {weather}, {temp:.2f}°C")
    time.sleep(3600)  # Run every hour

示例脚本可以获取纽约气候,想要获取本地天气将url更换至本地天气预报网站即可。

5.邮件推送Reddit新帖子

如果对某个特定的subreddit非常着迷,但又不想经常查看,这里有一个 Python 脚本,可以将最新的帖子直接发送到你的收件箱。

python 复制代码
import smtplib
import requests

def send_email(subject, body):
    from_addr = 'your_email@example.com'
    to_addr = 'your_email@example.com'
    msg = f"主题: {subject}\n\n{body}"
    with smtplib.SMTP('smtp.gmail.com', 587) as server:
        server.starttls()
        server.login('your_email@example.com', 'your_password')
        server.sendmail(from_addr, to_addr, msg)

def get_reddit_posts(subreddit):
    url = f"https://www.reddit.com/r/{subreddit}/new.json"
    headers = {'User-agent': 'Mozilla/5.0'}
    response = requests.get(url, headers=headers)
    data = response.json()
    return [post['data']['title'] for post in data['data']['children']]

posts = get_reddit_posts('python')
send_email('最新 Reddit 帖子', '\n'.join(posts))

普通 Reddit 用户每次访问网站的平均时间为 16 分钟,自动化这个过程可以节省很多时间。

6.网页转换电子书

这个脚本可将喜欢的文章转换为电子书格式,非常适合离线阅读:

python 复制代码
import requests
from bs4 import BeautifulSoup
from ebooklib import epub

def create_ebook(url, book_title):
    response = requests.get(url)
    soup = BeautifulSoup(response.content, 'html.parser')
    
    book = epub.EpubBook()
    book.set_title(book_title)
    
    chapter = epub.EpubHtml(title='章节 1', file_name='chap_01.xhtml')
    chapter.content = soup.prettify()
    book.add_item(chapter)
    
    book.spine = ['nav', chapter]
    epub.write_epub(f'{book_title}.epub', book, {})

create_ebook('https://example.com/your-favorite-article', '我的电子书')

7.将文本转换为语音

想要倾听代码输出的声音,这个脚本能够文本转换为语音:

python 复制代码
import pyttsx3

def text_to_speech(text):
    engine = pyttsx3.init()
    engine.say(text)
    engine.runAndWait()

text_to_speech('Hello World, Python is amazing!')

听输出可以捕捉错误或让自己从阅读中解脱出来。

8.检查网站可用性

想知道网站是否宕机,这里有一个简单的脚本可以帮助检查:

python 复制代码
import requests

def is_website_online(url):
    try:
        response = requests.get(url)
        return response.status_code == 200
    except:
        return False

print(is_website_online('https://example.com'))

9.跟踪加密货币价格

不要错过下一个下跌或上涨,使用这个脚本跟踪喜欢的加密货币价格:

python 复制代码
import requests

def get_crypto_price(crypto):
    url = f"https://api.coindesk.com/v1/bpi/currentprice/{crypto}.json"
    response = requests.get(url)
    data = response.json()
    return data['bpi']['USD']['rate']

print(get_crypto_price('BTC'))

10.下载完成后关闭电脑

这段脚本在下载完成时关闭你的电脑:

python 复制代码
import os
import time

def check_downloads():
    while True:
        if not os.listdir('/path/to/downloads'):
            print("正在关闭...")
            os.system("shutdown /s /t 1")
        time.sleep(60)

check_downloads()

现在可以点击"下载",等你回来时,电脑已经关机。

11.为脚本设置密码保护

这里有一个有趣的脚本,给脚本设置密码保护,以便没有权限的人无法运行它们。

python 复制代码
import getpass

password = getpass.getpass('输入你的密码: ')
if password != 'secret':
    print('访问被拒绝')
    exit()
else:
    print('访问授权')
    # 在这里放置你的受保护代码

12.监控CPU使用率

用下面的脚本监控CPU温度和使用情况:

python 复制代码
import psutil

def monitor_cpu():
    print(f"CPU 使用率: {psutil.cpu_percent()}%")
    print(f"内存使用率: {psutil.virtual_memory().percent}%")

monitor_cpu()

因为过热从来都不是一件好事。

13.将PDFs转换为文本

如果经常处理 PDF,这个脚本能够帮助提取文本:

python 复制代码
import PyPDF2

def pdf_to_text(pdf_file):
    reader = PyPDF2.PdfReader(pdf_file)
    text = ''
    for page in reader.pages:
        text += page.extract_text()
    return text

print(pdf_to_text('example.pdf'))

现在可以轻松提取重要信息,而不需要无尽的复制粘贴。

14.生成二维码

为任何 URL 或文本创建一个二维码:

python 复制代码
import qrcode

def generate_qr(text, filename):
    img = qrcode.make(text)
    img.save(f"{filename}.png")

generate_qr('https://example.com', 'my_qr_code')

15.下载YouTube视频

在几秒钟内下载喜欢的YouTube视频:

python 复制代码
from pytube import YouTube

def download_video(url):
    yt = YouTube(url)
    yt.streams.get_highest_resolution().download()

download_video('https://www.youtube.com/watch?v=your_favorite_video')

请记住不要侵权下载使用哦。

16.创建随机强密码

使用这个脚本生成强随机密码:

python 复制代码
import string
import random

def generate_password(length):
    chars = string.ascii_letters + string.digits + string.punctuation
    return ''.join(random.choice(chars) for _ in range(length))

print(generate_password(16))

请放弃弱密码的使用。

17.获取实时股票价格

使用这个快速脚本跟踪实时股票价格:

python 复制代码
import requests

def get_stock_price(symbol):
    url = f"https://finnhub.io/api/v1/quote?symbol={symbol}&token=your_api_key"
    response = requests.get(url)
    data = response.json()
    return data['c']

print(get_stock_price('AAPL'))

在不打开浏览器的情况下检查投资组合。

18.创建简单聊天机器人

制作自己的聊天机器人:

python 复制代码
import random

def chatbot():
    responses = ['你好!', '我能帮你什么?', '再见!']
    while True:
        user_input = input("你: ")
        if user_input.lower() == 'bye':
            print("聊天机器人: 再见!")
            break
        print(f"聊天机器人: {random.choice(responses)}")

chatbot()

19.每日步数跟踪

在Python中获取步数:

python 复制代码
import fitbit

def get_daily_steps(token):
    client = fitbit.Fitbit('client_id', 'client_secret', oauth2_token=token)
    steps = client.activities()['summary']['steps']
    return steps

print(f"今天的步数: {get_daily_steps('your_token')}")

20.创建待办事项列表

一个简单的待办事项列表,使用脚本创建:

复制代码
import json

def add_task(task):
    with open('todo.json', 'r+') as file:
        tasks = json.load(file)
        tasks.append(task)
        file.seek(0)
        json.dump(tasks, file)

add_task('发布 Medium 文章')
相关推荐
花酒锄作田5 小时前
企业微信机器人与 DeepAgents 集成实践
python·mcp·deepagents
SPC的存折5 小时前
1、Redis数据库基础
linux·运维·服务器·数据库·redis·缓存
爱学习的小囧6 小时前
VMware ESXi 6.7U3v 新版特性、驱动集成教程和资源包、部署教程及高频问答详情
运维·服务器·虚拟化·esxi6.7·esxi蟹卡驱动
小疙瘩6 小时前
只是记录自己发布若依分离系统到linux过程中遇到的问题
linux·运维·服务器
dldw7777 小时前
IE无法正常登录windows2000server的FTP服务器
运维·服务器·网络
likerhood7 小时前
java中`==`和`.equals()`区别
java·开发语言·python
运维有小邓@7 小时前
什么是重放攻击?如何避免成为受害者?
运维·网络·安全
qq_283720057 小时前
Python Celery + FastAPI + Vue 全栈异步任务实战
vue.js·python·fastapi
2401_885885048 小时前
营销推广短信接口集成:结合营销策略实现的API接口动态变量填充方案
前端·python
汤愈韬8 小时前
下一代防火墙通用原理
运维·服务器·网络·security