使用Python开发一个批量文本地址生成二维码工具的详细教程
作者:xcLeigh
引言
本文介绍了用 Python 开发批量地址生成二维码工具的教程。工具支持高效批量处理多地址,可自定义二维码颜色、尺寸、边框,还能加 logo,输出灵活。需安装 qrcode、Pillow、pandas 等库,分四步实现:准备地址数据(代码定义列表或 Excel 读取)、编写生成单个二维码的核心函数、实现批量生成逻辑、运行代码查看效果。文中还给出样式优化技巧,如高对比度颜色搭配、合适尺寸选择,解答了常见问题,并提供工具扩展建议,能有效提升生成二维码的效率与美观度,适合有批量生成需求的用户学习使用。
在日常工作与生活中,二维码的应用场景越来越广泛,无论是分享地址信息,还是用于活动签到、物料宣传等,都离不开它。如果需要为大量地址生成二维码,手动制作不仅效率低下,还难以保证样式统一。今天就带大家用 Python 开发一个批量地址生成二维码的小工具,只需几行代码,就能快速生成美观、规范的二维码,还能自定义样式哦!
一、工具核心价值与所需库
1. 工具核心价值
- 高效批量处理:支持一次性导入多个地址(如 Excel 表格中的几十上百个文本或URL地址),自动生成对应二维码,告别重复手动操作。
- 样式高度自定义:可自由设置二维码的颜色(前景色、背景色)、尺寸、边框大小,还能添加 logo 图标,让二维码更具辨识度。
- 输出灵活可控:生成的二维码可保存为
PNG/JPG
等常见格式,且能自定义保存路径,方便后续整理与使用。
2. 必备 Python 库
实现这个工具需要用到 3 个核心库,各自的作用如下:
- qrcode:核心二维码生成库,支持生成标准二维码,并提供丰富的样式配置参数。
- Pillow(PIL):Python 图像处理库,用于给二维码添加 logo、调整图像尺寸等操作。
- pandas:用于读取 Excel/CSV 文件中的地址数据,实现批量数据导入(如果地址较少,也可直接用列表存储,此库可选)。
如果你的环境中还没有安装这些库,可通过以下命令一键安装:
pip install qrcode pillow pandas openpyxl
(注:openpyxl
是 pandas 读取 Excel 文件的依赖库,需一并安装)
二、实战步骤:从 0 到 1 实现批量生成
接下来我们分 4 个步骤实现工具开发,从环境准备到代码运行,每一步都有详细说明,新手也能轻松跟上。
步骤 1:准备地址数据
有两种方式可以提供地址数据,大家可根据实际需求选择:
方式 1:直接在代码中定义地址列表(适合少量地址)
如果只需生成 10 个以内的二维码,可直接在代码里写一个列表,示例如下:
# 地址列表 address_list = [ "北京市朝阳区建国路88号现代城A座1501室", "上海市浦东新区张江高科技园区博云路2号浦软大厦10层", "广州市天河区珠江新城冼村路5号凯华国际中心28楼", "深圳市南山区科技园科苑路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 数据的代码:
import pandas as pd # 读取Excel文件,获取"地址"列的数据 df = pd.read_excel("addresses.xlsx", engine="openpyxl") # 将地址列转换为列表(确保无空值) address_list = df["地址"].dropna().tolist()
步骤 2:编写二维码生成核心函数
我们先封装一个generate_qrcode
函数,实现 “单个地址生成二维码” 的功能,包含样式自定义参数:
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): """ 生成单个地址的二维码 参数说明: 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. 配置二维码基本参数 qr = qrcode.QRCode( version=1, # 二维码版本(1-40,版本越高越复杂) error_correction=qrcode.constants.ERROR_CORRECT_H, # 容错等级(H最高,可覆盖30%区域) box_size=qr_size, # 每个格子的像素大小 border=border, # 边框宽度 ) # 2. 添加地址数据并生成二维码 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:实现批量生成逻辑
调用上面的generate_qrcode
函数,循环处理address_list
中的所有地址,实现批量生成:
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): """ 批量生成地址二维码 参数说明: address_list: list - 地址列表 base_save_dir: str - 基础保存目录(默认"address_qrcodes") 其他参数:同generate_qrcode函数 """ 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)}") # ------------------- 调用批量生成函数 ------------------- if __name__ == "__main__": # 1. 准备地址列表(二选一) # 方式1:直接定义列表 # address_list = [ # "北京市朝阳区建国路88号现代城A座1501室", # "上海市浦东新区张江高科技园区博云路2号" # ] # 方式2:从Excel读取 df = pd.read_excel("addresses.xlsx", engine="openpyxl") address_list = df["地址"].dropna().tolist() # 2. 批量生成(可根据需求调整参数) 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
)。 - 运行代码:直接执行 Python 脚本,控制台会输出每个二维码的生成进度。
- 查看结果:代码运行完成后,会在当前目录生成
my_address_qrcodes
文件夹,里面存放着所有生成的二维码,每个文件命名格式为 “地址_序号_地址前 8 字…png”,方便识别。
三、效果展示与样式优化技巧
1. 基础效果(无 logo)
生成的二维码清晰可扫,前景色为海绿色(#2E8B57
),背景色为浅灰色(#F5F5F5
),边框窄,整体简洁大方,扫码后可直接跳转查看地址(或复制地址)。
2. 带 logo 效果
如果添加了 logo(如公司 logo),logo 会居中显示在二维码上,且由于我们设置了高容错等级(ERROR_CORRECT_H
),即使 logo 遮挡部分区域,也不影响扫码识别。
3. 样式优化技巧
颜色搭配:建议选择对比度高的颜色组合(如深色前景 + 浅色背景),避免浅色前景 + 深色背景(扫码识别率低)。推荐组合:
- 商务风:
#003366
(深蓝)+#FFFFFF
(白) - 活力风:
#FF6600
(橙)+#F8F8F8
(浅灰)
尺寸选择:如果用于打印(如海报、物料),qr_size
建议设为 15-20;如果用于电子屏幕(如微信分享),设为 10-12 即可。
logo 处理:logo 图片建议用透明背景的 PNG 格式,尺寸不超过二维码的 1/5,避免遮挡关键信息。
四、完整代码和运行效果
先在python同级目录下创建上面说的 excel文件 ,然后下面代码直接放到python文件里面可以运行 。
import qrcode from PIL import Image import os import pandas as pd # # 地址列表-方式1 # address_list = [ # "北京市朝阳区建国路88号现代城A座1501室", # "上海市浦东新区张江高科技园区博云路2号浦软大厦10层", # "广州市天河区珠江新城冼村路5号凯华国际中心28楼", # "深圳市南山区科技园科苑路8号讯美科技广场3栋20层" # ] # 地址列表-方式2 # 读取Excel文件,获取"地址"列的数据 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): """ 生成单个地址的二维码 参数说明: 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. 配置二维码基本参数 qr = qrcode.QRCode( version=1, # 二维码版本(1-40,版本越高越复杂) error_correction=qrcode.constants.ERROR_CORRECT_H, # 容错等级(H最高,可覆盖30%区域) box_size=qr_size, # 每个格子的像素大小 border=border, # 边框宽度 ) # 2. 添加地址数据并生成二维码 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): """ 批量生成地址二维码 参数说明: address_list: list - 地址列表 base_save_dir: str - 基础保存目录(默认"address_qrcodes") 其他参数:同generate_qrcode函数 """ 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)}") # ------------------- 调用批量生成函数 ------------------- if __name__ == "__main__": # 1. 准备地址列表(二选一) # 方式1:直接定义列表 # address_list = [ # "北京市朝阳区建国路88号现代城A座1501室", # "上海市浦东新区张江高科技园区博云路2号" # ] # 方式2:从Excel读取 df = pd.read_excel("addresses.xlsx", engine="openpyxl") address_list = df["地址"].dropna().tolist() # 2. 批量生成(可根据需求调整参数) 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(需放在代码目录) )
运行效果:
二维码 就不放了,系统审核不通过!快去动手打造自己的二维码吧!
五、常见问题与解决方案
问题 1:运行代码时提示 “No module named ‘openpyxl’”
解决方案:安装 openpyxl 依赖库,执行命令pip install openpyxl
。
问题 2:生成的二维码扫码后无法识别
可能原因:
- logo 尺寸过大,遮挡过多区域 → 减小 logo 尺寸(如设为二维码的 1/6)。
- 颜色对比度太低 → 更换对比度高的颜色组合。
- 地址内容过长 → 可将地址转换为短链接(如用 tinyurl),再生成二维码。
问题 3:Excel 文件读取时提示 “FileNotFoundError”
解决方案:确保 Excel 文件(addresses.xlsx
)与 Python 脚本在同一目录,或在代码中写全文件路径(如"C:/data/addresses.xlsx"
)。
六、工具扩展建议
这个小工具还可以进一步扩展,满足更多需求:
- 添加二维码批量导出到 Excel:将生成的二维码路径(或 Base64 编码)写入 Excel,方便管理。
- 支持自定义二维码内容格式:如在地址前添加 “地址:” 前缀,或拼接联系电话,示例:
f"地址:{address}\n联系电话:13800138000"
。 - 生成带文字说明的二维码图片:用 Pillow 在二维码下方添加地址文字,方便肉眼识别。
如果大家有扩展需求,可以在评论区留言,后续会继续分享优化方案!
通过以上步骤,相信你已经掌握了用 Python 批量生成地址二维码的方法。这个工具不仅能提高工作效率,还能通过自定义样式让二维码更具特色,赶紧动手试试吧!
以上就是使用Python开发一个批量文本地址生成二维码工具的详细教程的详细内容,更多关于Python批量文本地址生成二维码的资料请关注脚本之家其它相关文章!