2025 ha sido todo acerca de las automatizaciones. Todo el mundo sigue hablando de cómo se puede automatizar una cosa u otra utilizando herramientas como n8n, Zapier, Huginn o Make. Pero la gentío olvida lo claro que es automatizar casi cualquier cosa con el arcaico Python (no, de verdad). Ejecuto pequeños scripts en mis máquinas Mac y Windows para manejar tareas que normalmente consumirían horas durante la semana, y positivamente reducción mucho tiempo gracias a ellos.
6 scripts de PowerShell para automatizar y acelerar su flujo de trabajo
Cuando trabaja a través de la CLI, ahorra mucho tiempo. Aquí hay scripts de PowerShell para acelerar su flujo de trabajo.
Limpia el desorden que es la bandeja de entrada
Cuando no quieres guerrear con todo ese lío
Este pequeño script se conecta a su bandeja de entrada de correo electrónico a través de IMAP y se encarga del harto trabajo de eliminar o clasificar mensajes que ya no necesita. Puede indicarle que busque mensajes no leídos que tengan más de una cierta cantidad de días y los moverá silenciosamente a su archivo para que su bandeja de entrada se sienta más liviana.
Es especialmente útil si recibe docenas de correos electrónicos promocionales cada día y no tiene interés en borrarlos uno por uno. Donado que se ejecuta a través de IMAP, funciona de la misma modo en la mayoría de los proveedores de correo electrónico.
#!/usr/bin/env python3
"""
clean_inbox.py
Archive or delete emails older than N days that match a simple filter.
Usage:
python clean_inbox.py your-email@example.com app-password --days 30 --archive
"""
import imaplib, email, sys, argparse, datetimeparser = argparse.ArgumentParser()
parser.add_argument('email')
parser.add_argument('password')
parser.add_argument('--imap', default="imap.gmail.com")
parser.add_argument('--days', type=int, default=30)
parser.add_argument('--archive', action='store_true', help='Move to (Gmail)/All Mail (Gmail)')
parser.add_argument('--delete', action='store_true', help='Delete instead of archive')
args = parser.parse_args()cutoff = (datetime.datetime.utcnow() - datetime.timedelta(days=args.days)).strftime("%d-%b-%Y")
M = imaplib.IMAP4_SSL(args.imap)
M.login(args.email, args.password)
M.select("INBOX")
typ, data = M.search(None, '(BEFORE "{}")'.format(cutoff))
ids = data(0).split()
print(f"Found {len(ids)} messages before {cutoff}")
if not ids:
M.logout(); sys.exit()if args.delete:
for i in ids: M.store(i, '+FLAGS', 'Deleted')
M.expunge()
print("Deleted messages.")
elif args.archive:
# Gmail special: move to All Mail by copying then deleting from INBOX
for i in ids:
M.copy(i, '(Gmail)/All Mail')
M.store(i, '+FLAGS', 'Deleted')
M.expunge()
print("Archived messages.")
else:
print("No action specified. Use --archive or --delete.")
M.logout()
Hacer una copia de seguridad de los archivos en el almacenamiento en la montón
Ahorra tiempo cuando tienes archivos dispersos
Este script le brinda una modo claro de dirigir archivos a cualquier proveedor de almacenamiento compatible con S3. Lo apunta a una carpeta y carga todos los archivos que contiene a su depósito en la montón. Ahorra tiempo cuando tiene archivos dispersos que desea sacar de su máquina o cuando simplemente necesita una copia de seguridad rápida de documentos de trabajo, archivos PDF o capturas de pantalla.
El script sólo se centra en la carga y mantiene las cosas al leve, lo que lo hace ideal para copias de seguridad diarias o semanales. Si prefiere servicios como Wasabi o DigitalOcean Spaces, todavía funciona porque utiliza las mismas operaciones estilo S3.
#!/usr/bin/env python3
"""
s3_backup.py
Sync a restringido folder to S3 bucket (uploads new or changed files).
Usage:
export AWS_ACCESS_KEY_ID=...
export AWS_SECRET_ACCESS_KEY=...
python s3_backup.py /path/to/folder bucket-name prefix
"""
import boto3, os, sys, hashlib
from pathlib import Pathrestringido = Path(sys.argv(1))
bucket = sys.argv(2)
prefix = sys.argv(3) if len(sys.argv) > 3 else ''s3 = boto3.client('s3')
def md5(path):
h=hashlib.md5()
with open(path,'rb') as f:
for chunk in iter(lambda: f.read(8192), b''): h.update(chunk)
return h.hexdigest()for p in restringido.rglob('*'):
if p.is_file():
key = (prefix + "https://www.xda-developers.com/" + str(p.relative_to(restringido))).lstrip("https://www.xda-developers.com/")
# quick check: compare sizes; skip if same size and same etag not checked here
s3.upload_file(str(p), bucket, key)
print("Uploaded", key)
Ordenar las capturas de pantalla
Porque todos tenemos demasiados
Las capturas de pantalla tienden a tirarse por todo el sistema en lugares como el escritorio y la carpeta de descargas. Este script los encuentra, los identifica mediante patrones de nombres comunes y los mueve a una carpeta de destino única y ordenada, ordenada por vencimiento. Ya no tengo que despabilarse una captura de pantalla que tomé antiguamente porque todo se encuentra internamente de una estructura de carpetas limpia.
Incluso puede utilizar un modo de ejecución en seco que muestra lo que se moverá antiguamente de permitir cualquier cambio. Es rápido de ejecutar, funciona en cualquier plataforma y es una de esas pequeñas herramientas que inmediatamente hacen que su sistema se sienta menos complicado. Si toma muchas capturas de pantalla para trabajar, este script le ahorrará horas de búsqueda y clasificación.
#!/usr/bin/env python3
"""
screenshot_sorter.py
Usage:
python screenshot_sorter.py --src ~/Downloads --src ~/Desktop --dest ~/Pictures/Screenshots --dry-run
"""
import argparse, shutil, re
from pathlib import Path
from datetime import datetimep = argparse.ArgumentParser()
p.add_argument('--src', action='append', default=(str(Path.home() / 'Downloads'), str(Path.home() / 'Desktop')))
p.add_argument('--dest', default=str(Path.home() / 'Pictures"https://www.xda-developers.com/"Screenshots'))
p.add_argument('--dry-run', action='store_true')
p.add_argument('--days', type=int, default=365)
args = p.parse_args()patterns = re.compile(r'screen(sho?t)?t|screenshot|スクリーンショット|截圖', re.I)
exts = {'.png','.jpg','.jpeg','.webp','.bmp','.tiff'}for s in args.src:
for f in Path(s).rglob('*'):
if f.is_file() and f.suffix.lower() in exts and patterns.search(f.name):
mtime = datetime.fromtimestamp(f.stat().st_mtime)
destdir = Path(args.dest) / mtime.strftime('%Y-%m-%d')
destdir.mkdir(parents=True, exist_ok=True)
target = destdir / f.name
if args.dry_run:
print("DRY", f, "->", target)
else:
i = 1
while target.exists():
target = destdir / (f.stem + f"_{i}" + f.suffix)
i += 1
shutil.move(str(f), str(target))
print("Moved", f, "->", target)
Cambiar el nombre de los archivos de forma masiva
Hacerlo a mano es doloroso
Cuando necesitas cambiar el nombre de un parte de archivos, hacerlo a mano resulta complicado. Este script le ofrece dos opciones. Puedes cambiar el nombre de los archivos usando un patrón que coincida con parte del nombre llamativo, o simplemente puedes cambiar el nombre de todo en secuencia. Es una posibilidad para situaciones como levantar una carpeta de fotos, reorganizar fortuna para un tesina o corregir nombres de archivos inconsistentes. Donado que utiliza expresiones regulares, puedes avanzar tanto como quieras, pero asimismo tienes la opción de abastecer las cosas muy básicas.
#!/usr/bin/env python3
"""
bulk_rename.py
Usage:
python bulk_rename.py /path/to/folder --pattern "IMG_(d+)" --replace "photo_1" --ext .jpg
Or simple sequence:
python bulk_rename.py /path/to/folder --seq "photo" --ext .png
"""
import argparse, re
from pathlib import Pathap = argparse.ArgumentParser()
ap.add_argument('folder')
ap.add_argument('--pattern')
ap.add_argument('--replace')
ap.add_argument('--seq')
ap.add_argument('--ext', default="")
args = ap.parse_args()
folder = Path(args.folder)if args.pattern and args.replace:
rx = re.compile(args.pattern)
for f in folder.iterdir():
if f.is_file():
m = rx.search(f.name)
if m:
new = rx.sub(args.replace, f.name)
f.rename(folder / new)
print("Renamed", f.name, "->", new)
elif args.seq:
i = 1
for f in sorted(folder.iterdir()):
if f.is_file():
ext = args.ext or f.suffix
new = f"{args.seq}_{i}{ext}"
f.rename(folder / new)
print("Renamed", f.name, "->", new)
i += 1
else:
print("No action. Provide --pattern/--replace or --seq.")
Organizar archivos y carpetas
Pon poco de orden en tus archivos
Este script verifica cada archivo internamente de una carpeta y lo mueve a una categoría coincidente según su extensión. Las imágenes van a una carpeta Imágenes, los documentos van a Documentos, las hojas de cálculo se mueven a Hojas de cálculo, etc. Todo lo que no coincida cae en una carpeta Otros. Es consumado para levantar una carpeta de descargas desordenada o preparar un directorio para almacenamiento a grande plazo. Traes poco de orden a tus archivos con un pequeño comando en ocasión de tirar y soltar todo a mano.
#!/usr/bin/env python3
"""
arrange_it.py
Usage:
python arrange_it.py /path/to/folder
"""
import sys
from pathlib import Pathmapping = {
'Images': {'.png','.jpg','.jpeg','.gif','.webp','.bmp','.tiff'},
'Docs': {'.pdf','.docx','.doc','.txt','.md','.odt','.rtf'},
'Spreadsheets': {'.xls','.xlsx','.csv'},
'Archives': {'.zip','.tar','.gz','.rar','.7z'},
'Scripts': {'.py','.sh','.js','.ps1'},
'Videos': {'.mp4','.mkv','.mov','.webm','.avi'}
}root = Path(sys.argv(1) if len(sys.argv)>1 else '.').expanduser()
for f in root.iterdir():
if f.is_file():
moved=False
for folder, exts in mapping.items():
if f.suffix.lower() in exts:
dest = root / folder
dest.mkdir(exist_ok=True)
target = dest / f.name
i=1
while target.exists():
target = dest / (f.stem + f"_"+str(i) + f.suffix)
i += 1
f.replace(target)
print("Moved", f.name, "->", dest.name + "https://www.xda-developers.com/" + target.name)
moved=True
break
if not moved:
dest = root / 'Others'
dest.mkdir(exist_ok=True)
f.replace(dest / f.name)
print("Moved", f.name, "-> Others/" + f.name)
Guarde su portapapeles como archivo de texto
Todo se protector en texto plano.
Si copias mucho texto durante el día, probablemente pierdas la pista de fragmentos importantes. Este script observa su portapapeles y protector cada sujeto nuevo en un archivo de texto diario. Le permite regresar y encontrar cualquier cosa que haya copiado anteriormente, ya sea una nota, un enlace o un fragmento de código. La idea es brindarle un historial personal simple de su portapapeles sin escazes de un administrador de portapapeles pesado. Todo se protector en texto sin formato internamente de una carpeta que puedes sincronizar o clasificar. Para escritores, desarrolladores e investigadores, se convierte en un asistente silencioso que les ayuda a recuperar cosas que normalmente perderían.
#!/usr/bin/env python3
"""
clip_save.py
Run it in your terminal or as a background process. It appends new clipboard items to daily file.
Usage:
python clip_save.py
"""
import time, os
from datetime import datetime
import pyperclipout = os.path.expanduser('~/clipboard_history')
os.makedirs(out, exist_ok=True)
last = None
while True:
try:
txt = pyperclip.paste()
except Exception:
txt=""
if txt and txt != last:
last = txt
fn = os.path.join(out, datetime.now().strftime('%Y-%m-%d') + '.txt')
with open(fn, 'a', encoding='utf-8') as f:
f.write(f"nn({datetime.now().isoformat()})n{txt}n")
print("Saved to", fn)
time.sleep(1.5)
Python es claro de memorizar
Ilustrarse Python es claro y, una vez que domines los conceptos básicos, puede suponer un definitivo cambio para ti como adjudicatario de PC. Puedes usarlo para automatizar partes de tu flujo de trabajo o conectarlo a las aplicaciones que ya usas para hacerlas más potentes. Por ejemplo, incluso puedes aumentar tu productividad en Excel incorporando Python a la mezcla.
5 scripts de Python que cualquiera puede usar para aumentar su productividad
Si ha aurícula conversar de Python pero no sabe por dónde originarse, estos cinco scripts pueden ayudarle a aumentar su productividad.





