n8n Code 節點 Python 教學:啟用並執行 Python 程式碼,釋放數據處理超能力

n8n code node python

n8n 的 Code 節點是解鎖自動化流程無限潛能的瑞士刀,它預設使用 JavaScript,讓你能用程式碼處理各種複雜的客製化邏輯。但如果你或你的團隊是 Python 的忠實擁護者呢?當你面對複雜的數據分析、資料清洗,或是想利用 Pandas、Requests 這類強大的 Python 函式庫時,難道只能望著 Code 節點興嘆,改用自己不熟悉的 JavaScript 嗎?

答案是:不用!n8n 其實隱藏著執行 Python 程式碼的強大功能!

是的,你沒看錯。雖然不是開箱即用的預設選項,但只要透過一個簡單的環境設定,你就能在 n8n 的 Code 節點中,從 JavaScript 切換到 Python,讓你用最熟悉的語言,在自動化工作流中大展拳腳。

這篇文章將是市面上最完整的 n8n Code 節點 Python 教學。我們將從最關鍵的環境設定開始,一步步帶你啟用 Python 執行模式,並詳細解釋 Python 環境下的資料傳遞邏輯,最後提供多個實戰程式碼範例,讓你真正釋放 n8n 結合 Python 的數據處理超能力。

關鍵第一步:如何為 n8n 啟用 Python 執行環境?

如果你直接在 n8n 的 Code 節點尋找,你會發現根本沒有切換語言的選項。這是因為 n8n 預設只會啟動它主要的核心執行緒,而這個執行緒是基於 Node.js 的,也就是 JavaScript。為了安全與穩定性,要執行其他語言,需要手動啟用一個獨立的執行模式。

認識 n8n 的執行模式

n8n 提供了不同的執行模式來處理工作流。簡單來說:

  • main 模式: 這是 n8n 的主要核心程序,專門用來執行 JavaScript。
  • isolated 模式: 這是一個隔離的、獨立的程序,n8n 可以用它來安全地執行非 JavaScript 的程式碼,例如 Python。

我們的目標,就是告訴 n8n:「嘿,請幫我把 isolated 這個隔離的執行程序也準備好!」

設定環境變數:EXECUTIONS_PROCESS=main

啟用 Python 的魔法咒語,就是設定一個名為 EXECUTIONS_PROCESS 的環境變數。你需要在啟動 n8n 服務時,將這個變數的值設定為 main

這看起來可能有點違反直覺,但它的意思是:「請將主要的執行模式設定為 main,並且也順便把隔離模式(isolated)給我準備好,以便我之後可以選用。」

Docker / Docker Compose 使用者設定教學

對於大多數使用 Docker 或 Docker Compose 來部署 n8n 的使用者,設定方法非常簡單。你只需要在你的設定檔中加入這個環境變數即可。

使用 docker-compose.yml 的設定範例:

在你的 docker-compose.yml 檔案中,找到 n8n 服務的 environment 區塊,在底下新增一行:

YAML

version: '3.7'

services:
  n8n:
    image: n8nio/n8n
    restart: always
    ports:
      - "5678:5678"
    environment:
      # --- 在這裡加上底下這一行 ---
      - EXECUTIONS_PROCESS=main
      # --- 其他你的環境變數 ... ---
      - GENERIC_TIMEZONE=Asia/Taipei
    volumes:
      - n8n_data:/home/node/.n8n

volumes:
  n8n_data:

使用 docker run 指令的設定範例:

如果你是直接使用 docker run 指令啟動,則在指令中加入 -e EXECUTIONS_PROCESS=main 參數:

Bash

docker run -it --rm \
  --name n8n \
  -p 5678:5678 \
  -v n8n_data:/home/node/.n8n \
  -e EXECUTIONS_PROCESS=main \
  n8nio/n8n

設定完成後,記得重新啟動你的 n8n 容器 (docker-compose up -d --force-recreate 或重新執行 docker run)。

驗證設定:在 Code 節點看見語言選項

成功重啟後,回到你的 n8n 工作流,新增一個 Code 節點。點開它的設定面板,你會驚喜地發現,在最上方多出了一個「Language」的下拉選單!點開它,你就能看到「Python」這個選項。

選取 Python 之後,底下的程式碼編輯區就會切換成 Python 的語法環境。恭喜你,你已經成功解鎖了 n8n 的 Python 模式!

n8n Python Code 節點:資料輸入與輸出邏輯

在 Python 環境中,資料的傳遞方式與 JavaScript 略有不同,但概念是相通的。

讀取輸入資料:Python 中的 items

在 Python 模式下,所有從上一個節點傳入的資料,同樣會被打包成一個名為 items 的變數。不過,它的結構是一個包含單一元素的 List,這個元素才包含了我們需要的資料。

  • items: 一個 Python List,通常你只需要處理第一個元素 items[0]
  • items[0].json: 這是一個 Dictionary,裡面存放了你真正需要的資料,也就是上一個節點輸出的 JSON 內容。

回傳輸出資料:Python 的 return 語法

與 JavaScript 模式一樣,Python 模式的 Code 節點也必須回傳一個 n8n 能看得懂的資料結構,否則工作流會中斷。這個結構是一個 List of Dictionaries,格式如下: [{'json': { ... }}]

基礎程式碼結構

這是一個在 Python Code 節點中最基本的樣板,你可以直接複製使用:

Python

# 取得從上一個節點傳來的第一筆資料
input_item = items[0]

# 準備一個新的 list 來存放處理完的結果
output_items = []

# --- 你的主要 Python 邏輯寫在這裡 ---

# 範例:複製一份原始資料,避免直接修改
# 這樣做是個好習慣
processed_data = input_item.json.copy()

# 在資料中新增一個欄位
processed_data['message'] = 'This was processed by Python!'

# 將處理完的資料包裝成 n8n 的 item 格式,並加入到輸出的 list 中
output_items.append({'json': processed_data})

# ------------------------------------

# 最後,回傳這個 list
return output_items
n8n code node python

實戰範例一:使用 Python 進行數據清洗與計算

目標: 假設有一批客戶資料,phone 欄位格式混亂(可能包含 +886-0- 等)。我們要用 Python 清理電話號碼,只保留數字,並計算客戶姓名 name 的長度。

輸入資料範例: [{'json': {'name': '陳小明', 'phone': '0912-345-678'}}]

Python Code 節點程式碼:

Python

import re # 匯入 Python 的正規表示式模組

items_in = items[0]
output_items = []

# 複製一份資料來處理
data = items_in.json.copy()

# 1. 清洗電話號碼
original_phone = data.get('phone', '') # 使用 .get() 避免欄位不存在時出錯
# 使用正規表示式,只保留數字
cleaned_phone = re.sub(r'\D', '', original_phone)
data['cleaned_phone'] = cleaned_phone

# 2. 計算姓名長度
name = data.get('name', '')
name_length = len(name)
data['name_length'] = name_length

output_items.append({'json': data})

return output_items

實戰範例二:利用 Pandas 進行簡單的數據分析

這絕對是 Python 使用者最期待的功能!n8n 的 Python 環境預先安裝了一些常用的函式庫,其中就包括數據分析神器 Pandas

目標: 接收多筆銷售數據(多個 Items),使用 Pandas DataFrame 計算總銷售額和平均單價,並回傳一筆彙總結果。

輸入資料範例 (來自上游節點的多個 Items): [{'json': {'product': 'A', 'amount': 1500}}, {'json': {'product': 'B', 'amount': 2500}}, {'json': {'product': 'C', 'amount': 800}}]

Python Code 節點程式碼:

Python

import pandas as pd

# 由於上游節點可能傳來多個 Items,我們需要將它們全部轉換
# items 變數本身就是一個 List of Items
all_data = [item['json'] for item in items]

# 將資料轉換成 Pandas DataFrame
df = pd.DataFrame(all_data)

# 進行數據分析
total_sales = df['amount'].sum()
average_price = df['amount'].mean()
transaction_count = len(df)

# 建立一個新的 dictionary 來存放我們的分析結果
summary = {
    'total_sales': int(total_sales), # 轉換成 Python 原生 int
    'average_price': float(average_price), # 轉換成 float
    'transaction_count': transaction_count
}

# n8n Code 節點期望回傳一個 List,所以我們將結果包裝起來
return [{'json': summary}]

Python vs. JavaScript:我該在 Code 節點用哪個?

既然兩個都能用,該如何選擇?你可以根據以下幾點來判斷:

選擇 Python 的理由:

  • 團隊熟悉度: 如果你的團隊或你自己是 Python 技術棧,那麼用 Python 能夠大幅降低學習成本,提升開發效率。
  • 數據科學函式庫: 當你需要使用 Pandas、NumPy 進行複雜的數據處理、分析,或是未來可能需要串接機器學習模型時,Python 是不二之選。
  • 豐富的生態系: Python 在網路爬蟲 (Requests, BeautifulSoup)、API 串接等方面有著非常成熟且豐富的函式庫生態。

選擇 JavaScript 的理由:

  • 開箱即用: 不需要任何額外環境設定,是 n8n 的預設語言,隨開即用。
  • 執行效能: 因為是在 n8n 的 main 主程序中執行,通常 JavaScript 的執行速度會比透過 isolated 程序執行的 Python 來得快一些,適合處理需要快速反應的輕量級任務。
  • 語法一致性: 與 n8n 內建的 Expressions 語法(同樣基於 JavaScript)更為接近,學習曲線更平滑。
n8n code node python

結語

啟用 Python 功能,就像是為你的 n8n 工作流裝上了一顆來自不同宇宙的強大引擎。它為習慣 Python 的開發者與數據分析師們,打開了一扇通往更深層次自動化的大門,尤其是在處理複雜數據方面,Python 的優勢無可取代。

請記住,解鎖這項功能的關鍵,就是在啟動 n8n 時設定好 EXECUTIONS_PROCESS=main 這個環境變數。一旦設定完成,你就可以將你所有的 Python 技能無縫對接到 n8n 的視覺化流程中。現在,就動手去設定,然後試著用你最熟悉的 Python 語法,開始打造真正屬於你的、無所不能的自動化工作流吧!

延伸閱讀
n8n IF 節點教學:掌握 True/False 條件判斷,打造更智慧的自動化工作流
n8n Switch 節點教學:告別複雜 IF 巢狀結構,優雅實現多重條件判斷
n8n Merge 節點教學:合併多個資料來源,告別手動複製貼上
n8n Code 節點終極教學:釋放 JavaScript 的力量,打造無極限自動化
n8n Code 節點 Python 教學:啟用並執行 Python 程式碼,釋放數據處理超能力
n8n Wait 節點教學:讓工作流學會「等待」,完美解決 API 限制與定時任務
n8n Set 節點教學:你的資料瑞士刀,新增、修改、篩選欄位一次搞定
n8n NoOp 節點教學:一個「什麼都不做」的節點,為何是整理工作流的神器?

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

返回頂端