python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python批量文本地址生成二维码

使用Python开发一个批量文本地址生成二维码工具的详细教程

作者:xcLeigh

在日常工作与生活中,二维码的应用场景越来越广泛,无论是分享地址信息,还是用于活动签到、物料宣传等,都离不开它,如果需要为大量地址生成二维码,手动制作不仅效率低下,还难以保证样式统一,所以今天就带大家用Python开发一个批量地址生成二维码的小工具

引言

本文介绍了用 Python 开发批量地址生成二维码工具的教程。工具支持高效批量处理多地址,可自定义二维码颜色、尺寸、边框,还能加 logo,输出灵活。需安装 qrcode、Pillow、pandas 等库,分四步实现:准备地址数据(代码定义列表或 Excel 读取)、编写生成单个二维码的核心函数、实现批量生成逻辑、运行代码查看效果。文中还给出样式优化技巧,如高对比度颜色搭配、合适尺寸选择,解答了常见问题,并提供工具扩展建议,能有效提升生成二维码的效率与美观度,适合有批量生成需求的用户学习使用。

在日常工作与生活中,二维码的应用场景越来越广泛,无论是分享地址信息,还是用于活动签到、物料宣传等,都离不开它。如果需要为大量地址生成二维码,手动制作不仅效率低下,还难以保证样式统一。今天就带大家用 Python 开发一个批量地址生成二维码的小工具,只需几行代码,就能快速生成美观、规范的二维码,还能自定义样式哦!

一、工具核心价值与所需库

1. 工具核心价值

2. 必备 Python 库

实现这个工具需要用到 3 个核心库,各自的作用如下:

如果你的环境中还没有安装这些库,可通过以下命令一键安装:

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,放在代码同一目录):

序号地址备注
1https://xcleigh.blog.csdn.net/article/details/149752927xcLeigh
2https://xcleigh.blog.csdn.net/article/details/149452966电科金仓
3https://xcleigh.blog.csdn.net/article/details/146366578ToDesk

读取 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:运行代码并查看效果

  1. 准备工作:如果用 Excel 读取地址,确保addresses.xlsx文件正确;如果加 logo,准备一张正方形的 logo 图片(如my_logo.png)。
  2. 运行代码:直接执行 Python 脚本,控制台会输出每个二维码的生成进度。
  3. 查看结果:代码运行完成后,会在当前目录生成my_address_qrcodes文件夹,里面存放着所有生成的二维码,每个文件命名格式为 “地址_序号_地址前 8 字…png”,方便识别。

三、效果展示与样式优化技巧

1. 基础效果(无 logo)

生成的二维码清晰可扫,前景色为海绿色(#2E8B57),背景色为浅灰色(#F5F5F5),边框窄,整体简洁大方,扫码后可直接跳转查看地址(或复制地址)。

2. 带 logo 效果

如果添加了 logo(如公司 logo),logo 会居中显示在二维码上,且由于我们设置了高容错等级(ERROR_CORRECT_H),即使 logo 遮挡部分区域,也不影响扫码识别。

3. 样式优化技巧

颜色搭配:建议选择对比度高的颜色组合(如深色前景 + 浅色背景),避免浅色前景 + 深色背景(扫码识别率低)。推荐组合:

尺寸选择:如果用于打印(如海报、物料),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:生成的二维码扫码后无法识别

可能原因:

问题 3:Excel 文件读取时提示 “FileNotFoundError”

解决方案:确保 Excel 文件(addresses.xlsx)与 Python 脚本在同一目录,或在代码中写全文件路径(如"C:/data/addresses.xlsx")。

六、工具扩展建议

这个小工具还可以进一步扩展,满足更多需求:

  1. 添加二维码批量导出到 Excel:将生成的二维码路径(或 Base64 编码)写入 Excel,方便管理。
  2. 支持自定义二维码内容格式:如在地址前添加 “地址:” 前缀,或拼接联系电话,示例:f"地址:{address}\n联系电话:13800138000"
  3. 生成带文字说明的二维码图片:用 Pillow 在二维码下方添加地址文字,方便肉眼识别。

如果大家有扩展需求,可以在评论区留言,后续会继续分享优化方案!

通过以上步骤,相信你已经掌握了用 Python 批量生成地址二维码的方法。这个工具不仅能提高工作效率,还能通过自定义样式让二维码更具特色,赶紧动手试试吧!

以上就是使用Python开发一个批量文本地址生成二维码工具的详细教程的详细内容,更多关于Python批量文本地址生成二维码的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文