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

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

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

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

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

