使用Python開發(fā)一個批量文本地址生成二維碼工具的詳細教程
引言
本文介紹了用 Python 開發(fā)批量地址生成二維碼工具的教程。工具支持高效批量處理多地址,可自定義二維碼顏色、尺寸、邊框,還能加 logo,輸出靈活。需安裝 qrcode、Pillow、pandas 等庫,分四步實現(xiàn):準備地址數(shù)據(jù)(代碼定義列表或 Excel 讀?。?、編寫生成單個二維碼的核心函數(shù)、實現(xiàn)批量生成邏輯、運行代碼查看效果。文中還給出樣式優(yōu)化技巧,如高對比度顏色搭配、合適尺寸選擇,解答了常見問題,并提供工具擴展建議,能有效提升生成二維碼的效率與美觀度,適合有批量生成需求的用戶學習使用。
在日常工作與生活中,二維碼的應用場景越來越廣泛,無論是分享地址信息,還是用于活動簽到、物料宣傳等,都離不開它。如果需要為大量地址生成二維碼,手動制作不僅效率低下,還難以保證樣式統(tǒng)一。今天就帶大家用 Python 開發(fā)一個批量地址生成二維碼的小工具,只需幾行代碼,就能快速生成美觀、規(guī)范的二維碼,還能自定義樣式哦!
一、工具核心價值與所需庫
1. 工具核心價值
- 高效批量處理:支持一次性導入多個地址(如 Excel 表格中的幾十上百個文本或URL地址),自動生成對應二維碼,告別重復手動操作。
- 樣式高度自定義:可自由設置二維碼的顏色(前景色、背景色)、尺寸、邊框大小,還能添加 logo 圖標,讓二維碼更具辨識度。
- 輸出靈活可控:生成的二維碼可保存為
PNG/JPG等常見格式,且能自定義保存路徑,方便后續(xù)整理與使用。
2. 必備 Python 庫
實現(xiàn)這個工具需要用到 3 個核心庫,各自的作用如下:
- qrcode:核心二維碼生成庫,支持生成標準二維碼,并提供豐富的樣式配置參數(shù)。
- Pillow(PIL):Python 圖像處理庫,用于給二維碼添加 logo、調整圖像尺寸等操作。
- pandas:用于讀取 Excel/CSV 文件中的地址數(shù)據(jù),實現(xiàn)批量數(shù)據(jù)導入(如果地址較少,也可直接用列表存儲,此庫可選)。
如果你的環(huán)境中還沒有安裝這些庫,可通過以下命令一鍵安裝:
pip install qrcode pillow pandas openpyxl

(注:openpyxl是 pandas 讀取 Excel 文件的依賴庫,需一并安裝)
二、實戰(zhàn)步驟:從 0 到 1 實現(xiàn)批量生成
接下來我們分 4 個步驟實現(xiàn)工具開發(fā),從環(huán)境準備到代碼運行,每一步都有詳細說明,新手也能輕松跟上。
步驟 1:準備地址數(shù)據(jù)
有兩種方式可以提供地址數(shù)據(jù),大家可根據(jù)實際需求選擇:
方式 1:直接在代碼中定義地址列表(適合少量地址)
如果只需生成 10 個以內的二維碼,可直接在代碼里寫一個列表,示例如下:

# 地址列表 address_list = [ "北京市朝陽區(qū)建國路88號現(xiàn)代城A座1501室", "上海市浦東新區(qū)張江高科技園區(qū)博云路2號浦軟大廈10層", "廣州市天河區(qū)珠江新城冼村路5號凱華國際中心28樓", "深圳市南山區(qū)科技園科苑路8號訊美科技廣場3棟20層" ]
方式 2:從 Excel 文件讀取地址(適合大量地址)
如果有幾十上百個地址(我這里是模板為了方便 ,就放了幾個地址),建議整理成 Excel 文件(格式如下),通過 pandas 讀取,更高效且不易出錯。
Excel 文件格式(命名為addresses.xlsx,放在代碼同一目錄):

| 序號 | 地址 | 備注 |
|---|---|---|
| 1 | https://xcleigh.blog.csdn.net/article/details/149752927 | xcLeigh |
| 2 | https://xcleigh.blog.csdn.net/article/details/149452966 | 電科金倉 |
| 3 | https://xcleigh.blog.csdn.net/article/details/146366578 | ToDesk |

讀取 Excel 數(shù)據(jù)的代碼:
import pandas as pd
# 讀取Excel文件,獲取"地址"列的數(shù)據(jù)
df = pd.read_excel("addresses.xlsx", engine="openpyxl")
# 將地址列轉換為列表(確保無空值)
address_list = df["地址"].dropna().tolist()
步驟 2:編寫二維碼生成核心函數(shù)
我們先封裝一個generate_qrcode函數(shù),實現(xiàn) “單個地址生成二維碼” 的功能,包含樣式自定義參數(shù):
import qrcode
from PIL import Image
import os
def generate_qrcode(address, save_path,
qr_color="black", bg_color="white",
qr_size=10, border=2, logo_path=None):
"""
生成單個地址的二維碼
參數(shù)說明:
address: str - 要生成二維碼的地址
save_path: str - 二維碼保存路徑(含文件名,如"qrcodes/address1.png")
qr_color: str - 二維碼前景色(默認黑色,支持英文/十六進制,如"#2E86AB")
bg_color: str - 二維碼背景色(默認白色)
qr_size: int - 二維碼尺寸(默認10,值越大二維碼越清晰)
border: int - 二維碼邊框寬度(默認2,單位為二維碼格子)
logo_path: str - logo圖片路徑(可選,如"logo.png",建議用正方形圖片)
"""
# 1. 配置二維碼基本參數(shù)
qr = qrcode.QRCode(
version=1, # 二維碼版本(1-40,版本越高越復雜)
error_correction=qrcode.constants.ERROR_CORRECT_H, # 容錯等級(H最高,可覆蓋30%區(qū)域)
box_size=qr_size, # 每個格子的像素大小
border=border, # 邊框寬度
)
# 2. 添加地址數(shù)據(jù)并生成二維碼
qr.add_data(address)
qr.make(fit=True) # 自動適配版本
# 3. 自定義顏色并生成圖像
qr_img = qr.make_image(fill_color=qr_color, back_color=bg_color).convert("RGB")
# 4. (可選)添加logo
if logo_path and os.path.exists(logo_path):
logo = Image.open(logo_path)
# 計算logo尺寸(建議為二維碼的1/5,避免遮擋信息)
logo_size = int(qr_img.size[0] / 5)
logo = logo.resize((logo_size, logo_size), Image.Resampling.LANCZOS) # 保持清晰度
# 計算logo位置(居中)
logo_pos = (
int((qr_img.size[0] - logo_size) / 2),
int((qr_img.size[1] - logo_size) / 2)
)
# 將logo粘貼到二維碼上
qr_img.paste(logo, logo_pos)
# 5. 保存二維碼(確保保存目錄存在)
os.makedirs(os.path.dirname(save_path), exist_ok=True)
qr_img.save(save_path)
print(f"成功生成:{save_path}")
步驟 3:實現(xiàn)批量生成邏輯
調用上面的generate_qrcode函數(shù),循環(huán)處理address_list中的所有地址,實現(xiàn)批量生成:
def batch_generate_qrcodes(address_list,
base_save_dir="address_qrcodes",
qr_color="#0066CC", bg_color="white",
qr_size=10, border=2, logo_path=None):
"""
批量生成地址二維碼
參數(shù)說明:
address_list: list - 地址列表
base_save_dir: str - 基礎保存目錄(默認"address_qrcodes")
其他參數(shù):同generate_qrcode函數(shù)
"""
for i, address in enumerate(address_list, start=1):
# 生成保存文件名(避免中文亂碼,用序號+簡短描述)
short_name = f"地址_{i}_{address[:8]}...".replace("/", "_").replace("\\\\", "_")
save_path = os.path.join(base_save_dir, f"{short_name}.png")
# 生成單個二維碼
generate_qrcode(
address=address,
save_path=save_path,
qr_color=qr_color,
bg_color=bg_color,
qr_size=qr_size,
border=border,
logo_path=logo_path
)
print(f"\n批量生成完成!共生成{len(address_list)}個二維碼,保存路徑:{os.path.abspath(base_save_dir)}")
# ------------------- 調用批量生成函數(shù) -------------------
if __name__ == "__main__":
# 1. 準備地址列表(二選一)
# 方式1:直接定義列表
# address_list = [
# "北京市朝陽區(qū)建國路88號現(xiàn)代城A座1501室",
# "上海市浦東新區(qū)張江高科技園區(qū)博云路2號"
# ]
# 方式2:從Excel讀取
df = pd.read_excel("addresses.xlsx", engine="openpyxl")
address_list = df["地址"].dropna().tolist()
# 2. 批量生成(可根據(jù)需求調整參數(shù))
batch_generate_qrcodes(
address_list=address_list,
base_save_dir="my_address_qrcodes", # 自定義保存目錄
qr_color="#2E8B57", # 海綠色前景色
bg_color="#F5F5F5", # 淺灰色背景色
qr_size=12, # 增大尺寸,更清晰
border=1, # 減小邊框
logo_path="my_logo.png" # 可選:添加自己的logo(需放在代碼目錄)
)
步驟 4:運行代碼并查看效果
- 準備工作:如果用 Excel 讀取地址,確保
addresses.xlsx文件正確;如果加 logo,準備一張正方形的 logo 圖片(如my_logo.png)。 - 運行代碼:直接執(zhí)行 Python 腳本,控制臺會輸出每個二維碼的生成進度。
- 查看結果:代碼運行完成后,會在當前目錄生成
my_address_qrcodes文件夾,里面存放著所有生成的二維碼,每個文件命名格式為 “地址_序號_地址前 8 字…png”,方便識別。
三、效果展示與樣式優(yōu)化技巧
1. 基礎效果(無 logo)
生成的二維碼清晰可掃,前景色為海綠色(#2E8B57),背景色為淺灰色(#F5F5F5),邊框窄,整體簡潔大方,掃碼后可直接跳轉查看地址(或復制地址)。
2. 帶 logo 效果
如果添加了 logo(如公司 logo),logo 會居中顯示在二維碼上,且由于我們設置了高容錯等級(ERROR_CORRECT_H),即使 logo 遮擋部分區(qū)域,也不影響掃碼識別。
3. 樣式優(yōu)化技巧
顏色搭配:建議選擇對比度高的顏色組合(如深色前景 + 淺色背景),避免淺色前景 + 深色背景(掃碼識別率低)。推薦組合:
- 商務風:
#003366(深藍)+#FFFFFF(白) - 活力風:
#FF6600(橙)+#F8F8F8(淺灰)
尺寸選擇:如果用于打印(如海報、物料),qr_size建議設為 15-20;如果用于電子屏幕(如微信分享),設為 10-12 即可。
logo 處理:logo 圖片建議用透明背景的 PNG 格式,尺寸不超過二維碼的 1/5,避免遮擋關鍵信息。
四、完整代碼和運行效果
先在python同級目錄下創(chuàng)建上面說的 excel文件 ,然后下面代碼直接放到python文件里面可以運行 。
import qrcode
from PIL import Image
import os
import pandas as pd
# # 地址列表-方式1
# address_list = [
# "北京市朝陽區(qū)建國路88號現(xiàn)代城A座1501室",
# "上海市浦東新區(qū)張江高科技園區(qū)博云路2號浦軟大廈10層",
# "廣州市天河區(qū)珠江新城冼村路5號凱華國際中心28樓",
# "深圳市南山區(qū)科技園科苑路8號訊美科技廣場3棟20層"
# ]
# 地址列表-方式2
# 讀取Excel文件,獲取"地址"列的數(shù)據(jù)
df = pd.read_excel("addresses.xlsx", engine="openpyxl")
# 將地址列轉換為列表(確保無空值)
address_list = df["地址"].dropna().tolist()
def generate_qrcode(address, save_path,
qr_color="black", bg_color="white",
qr_size=10, border=2, logo_path=None):
"""
生成單個地址的二維碼
參數(shù)說明:
address: str - 要生成二維碼的地址
save_path: str - 二維碼保存路徑(含文件名,如"qrcodes/address1.png")
qr_color: str - 二維碼前景色(默認黑色,支持英文/十六進制,如"#2E86AB")
bg_color: str - 二維碼背景色(默認白色)
qr_size: int - 二維碼尺寸(默認10,值越大二維碼越清晰)
border: int - 二維碼邊框寬度(默認2,單位為二維碼格子)
logo_path: str - logo圖片路徑(可選,如"logo.png",建議用正方形圖片)
"""
# 1. 配置二維碼基本參數(shù)
qr = qrcode.QRCode(
version=1, # 二維碼版本(1-40,版本越高越復雜)
error_correction=qrcode.constants.ERROR_CORRECT_H, # 容錯等級(H最高,可覆蓋30%區(qū)域)
box_size=qr_size, # 每個格子的像素大小
border=border, # 邊框寬度
)
# 2. 添加地址數(shù)據(jù)并生成二維碼
qr.add_data(address)
qr.make(fit=True) # 自動適配版本
# 3. 自定義顏色并生成圖像
qr_img = qr.make_image(fill_color=qr_color, back_color=bg_color).convert("RGB")
# 4. (可選)添加logo
if logo_path and os.path.exists(logo_path):
logo = Image.open(logo_path)
# 計算logo尺寸(建議為二維碼的1/5,避免遮擋信息)
logo_size = int(qr_img.size[0] / 5)
logo = logo.resize((logo_size, logo_size), Image.Resampling.LANCZOS) # 保持清晰度
# 計算logo位置(居中)
logo_pos = (
int((qr_img.size[0] - logo_size) / 2),
int((qr_img.size[1] - logo_size) / 2)
)
# 將logo粘貼到二維碼上
qr_img.paste(logo, logo_pos)
# 5. 保存二維碼(確保保存目錄存在)
os.makedirs(os.path.dirname(save_path), exist_ok=True)
qr_img.save(save_path)
print(f"成功生成:{save_path}")
def batch_generate_qrcodes(address_list,
base_save_dir="address_qrcodes",
qr_color="#0066CC", bg_color="white",
qr_size=10, border=2, logo_path=None):
"""
批量生成地址二維碼
參數(shù)說明:
address_list: list - 地址列表
base_save_dir: str - 基礎保存目錄(默認"address_qrcodes")
其他參數(shù):同generate_qrcode函數(shù)
"""
for i, address in enumerate(address_list, start=1):
# 生成保存文件名(避免中文亂碼,用序號+簡短描述)
short_name = f"地址_{i}_{address[:8]}...".replace("/", "_").replace("\\", "_")
save_path = os.path.join(base_save_dir, f"{short_name}.png")
# 生成單個二維碼
generate_qrcode(
address=address,
save_path=save_path,
qr_color=qr_color,
bg_color=bg_color,
qr_size=qr_size,
border=border,
logo_path=logo_path
)
print(f"\n批量生成完成!共生成{len(address_list)}個二維碼,保存路徑:{os.path.abspath(base_save_dir)}")
# ------------------- 調用批量生成函數(shù) -------------------
if __name__ == "__main__":
# 1. 準備地址列表(二選一)
# 方式1:直接定義列表
# address_list = [
# "北京市朝陽區(qū)建國路88號現(xiàn)代城A座1501室",
# "上海市浦東新區(qū)張江高科技園區(qū)博云路2號"
# ]
# 方式2:從Excel讀取
df = pd.read_excel("addresses.xlsx", engine="openpyxl")
address_list = df["地址"].dropna().tolist()
# 2. 批量生成(可根據(jù)需求調整參數(shù))
batch_generate_qrcodes(
address_list=address_list,
base_save_dir="my_address_qrcodes", # 自定義保存目錄
qr_color="#2E8B57", # 海綠色前景色
bg_color="#F5F5F5", # 淺灰色背景色
qr_size=12, # 增大尺寸,更清晰
border=1, # 減小邊框
logo_path="my_logo.png" # 可選:添加自己的logo(需放在代碼目錄)
)
運行效果:

二維碼 就不放了,系統(tǒng)審核不通過!快去動手打造自己的二維碼吧!
五、常見問題與解決方案
問題 1:運行代碼時提示 “No module named ‘openpyxl’”
解決方案:安裝 openpyxl 依賴庫,執(zhí)行命令pip install openpyxl。
問題 2:生成的二維碼掃碼后無法識別
可能原因:
- logo 尺寸過大,遮擋過多區(qū)域 → 減小 logo 尺寸(如設為二維碼的 1/6)。
- 顏色對比度太低 → 更換對比度高的顏色組合。
- 地址內容過長 → 可將地址轉換為短鏈接(如用 tinyurl),再生成二維碼。
問題 3:Excel 文件讀取時提示 “FileNotFoundError”
解決方案:確保 Excel 文件(addresses.xlsx)與 Python 腳本在同一目錄,或在代碼中寫全文件路徑(如"C:/data/addresses.xlsx")。
六、工具擴展建議
這個小工具還可以進一步擴展,滿足更多需求:
- 添加二維碼批量導出到 Excel:將生成的二維碼路徑(或 Base64 編碼)寫入 Excel,方便管理。
- 支持自定義二維碼內容格式:如在地址前添加 “地址:” 前綴,或拼接聯(lián)系電話,示例:
f"地址:{address}\n聯(lián)系電話:13800138000"。 - 生成帶文字說明的二維碼圖片:用 Pillow 在二維碼下方添加地址文字,方便肉眼識別。
如果大家有擴展需求,可以在評論區(qū)留言,后續(xù)會繼續(xù)分享優(yōu)化方案!
通過以上步驟,相信你已經掌握了用 Python 批量生成地址二維碼的方法。這個工具不僅能提高工作效率,還能通過自定義樣式讓二維碼更具特色,趕緊動手試試吧!
以上就是使用Python開發(fā)一個批量文本地址生成二維碼工具的詳細教程的詳細內容,更多關于Python批量文本地址生成二維碼的資料請關注腳本之家其它相關文章!
相關文章
利用python腳本提取Abaqus場輸出數(shù)據(jù)的代碼
這篇文章主要介紹了利用python腳本提取Abaqus場輸出數(shù)據(jù),利用python腳本對Abaqus進行數(shù)據(jù)提取時,要對python腳本做前步的導入處理,本文通過實例代碼詳細講解需要的朋友可以參考下2022-11-11
python代碼實現(xiàn)學生信息管理系統(tǒng)
這篇文章主要為大家詳細介紹了python代碼實現(xiàn)學生信息管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-05-05

