Receber por email
← Voltar para o catálogo

n8n-code-python

Write Python code in n8n Code nodes. Use when writing Python in n8n, using _input/_json/_node syntax, working with standard library, or need to understand Python limitations in n8n Code nodes.

17estrelas
Atualizado há 3 meses

Ver no GitHub ↗ Licença: MIT

Como adicionar

/plugin marketplace add neurawork-git/n8n-autopilot

O comando exato pode variar conforme o repositório. Confira o README no GitHub.

Para o autor da skill

Cole no README do seu repo

Mostra que sua skill está catalogada na Skillteca, gera backlink e tráfego rastreável.

[![Skillteca](https://www.skillteca.com.br/api/badge/n8n-code-python-neurawork-git/svg)](https://www.skillteca.com.br/skills/n8n-code-python-neurawork-git)

Alerta por categoria

Receba novas skills de Design e Frontend toda segunda

1 email curto, só com as skills novas de Design e Frontend. 4 minutos de leitura, sem spam, cancela com 1 clique.

Você confirma o email no primeiro envio. Sem spam. Cancela com 1 clique.

Ler descrição completa

Python Code Node (Beta)

Expert guidance for writing Python code in n8n Code nodes.

JavaScript First

Use JavaScript for 95% of use cases. Only use Python when:

  • You need specific Python standard library functions (e.g. statistics)
  • You're significantly more comfortable with Python syntax
  • You're doing data transformations better suited to Python

JavaScript has $helpers.httpRequest(), Luxon DateTime, and better n8n docs.

Quick Start

# Basic template for Python Code nodes
items = _input.all()

processed = []
for item in items:
    processed.append({
        "json": {
            **item["json"],
            "processed": True,
            "timestamp": datetime.now().isoformat()
        }
    })

return processed

Essential Rules

  1. Consider JavaScript first
  2. Access data: _input.all(), _input.first(), _input.item
  3. CRITICAL: Return [{"json": {...}}] format
  4. CRITICAL: Webhook data is under _json["body"]
  5. CRITICAL LIMITATION: No external libraries — no requests, pandas, numpy

CRITICAL: No External Libraries

# ❌ NOT AVAILABLE
import requests   # ModuleNotFoundError
import pandas     # ModuleNotFoundError

# ✅ AVAILABLE (standard library only)
import json
import datetime
import re
import base64
import hashlib
import urllib.parse
import math
import random
import statistics

Workarounds:

  • Need HTTP requests? → Use HTTP Request node before Code node (or switch to JavaScript)
  • Need pandas? → Use statistics module for basic stats, or switch to JavaScript

Data Access

# All items
all_items = _input.all()

# First item
first_item = _input.first()
data = first_item["json"]

# Each item mode
current_item = _input.item

# Other nodes
webhook_data = _node["Webhook"]["json"]
http_data = _node["HTTP Request"]["json"]

CRITICAL: Webhook Data

# ❌ WRONG
name = _json["name"]        # KeyError!

# ✅ CORRECT
name = _json["body"]["name"]

# ✅ SAFER
name = _json.get("body", {}).get("name", "Unknown")

Return Format

# ✅ Single result
return [{"json": {"field": value}}]

# ✅ List comprehension
return [{"json": item["json"]} for item in _input.all()]

# ✅ Empty
return []

WRONG: return {"json": {...}} (no list), return [{"field": value}] (no json key)

Python Modes

Python (Beta) — Recommended

Uses _input, _json, _node, _now helpers.

items = _input.all()
now = _now  # Built-in datetime

return [{"json": {"count": len(items), "timestamp": now.isoformat()}}]

Python (Native) (Beta)

Uses _items, _item only — no helpers.

return [{"json": item["json"]} for item in _items]

Use Python (Beta) for better n8n integration.

Common Patterns

Filtering + Aggregation

items = _input.all()
total = sum(item["json"].get("amount", 0) for item in items)
valid = [item for item in items if item["json"].get("amount", 0) > 0]

return [{"json": {"total": total, "count": len(valid)}}]

String Processing with Regex

import re

all_emails = []
for item in _input.all():
    emails = re.findall(r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b', item["json"].get("text", ""))
    all_emails.extend(emails)

return [{"json": {"emails": list(set(all_emails)), "count": len(set(all_emails))}}]

Statistical Analysis

from statistics import mean, median, stdev

values = [item["json"].get("value", 0) for item in _input.all() if "value" in item["json"]]

if values:
    return [{"json": {"mean": mean(values), "median": median(values), "stdev": stdev(values) if len(values) > 1 else 0}}]
else:
    return [{"json": {"error": "No values found"}}]

Top 5 Mistakes

  1. Importing external libraries → Use HTTP Request node or switch to JavaScript
  2. No return statement → Always return a list
  3. Wrong return format → Must be [{"json": {...}}]
  4. Direct dict access → Use .get() to avoid KeyError
  5. Webhook body → _json["email"] ❌ → _json["body"]["email"] ✅

Best Practices

  • Always use .get() for dictionary access
  • Handle None explicitly: value = item["json"].get("x") or 0
  • Use list comprehensions for filtering
  • Return consistent structure from all code paths
  • Debug with print() (appears in browser console)

Standard Library Quick Reference

import json          # json.loads(), json.dumps()
from datetime import datetime, timedelta  # datetime.now(), timedelta(days=1)
import re            # re.findall(), re.sub()
import base64        # base64.b64encode(), b64decode()
import hashlib       # hashlib.sha256(text.encode()).hexdigest()
import urllib.parse  # urllib.parse.urlencode(), urlparse()
from statistics import mean, median, stdev
Compartilhar X LinkedIn