Python从CSV数据错误地创建聚合QR码

时间:2017-08-17 04:40:34

标签: python macos python-2.7 csv qr-code

我有一个Python脚本,我认为它最初工作正常;它基本上为组织创建一个文件夹,抓取csv,并使用该csv的第一列创建QR码(与组织名称连接),它存储在' image'该组织的文件夹。

这是脚本:

import csv
import qrcode
import os

org = "1234"
filename = '/Users/Ryan/Download/test.csv'
localfolder = '/Users/Ryan/Download/'+org
localimagefolder = localfolder+'/image'

if not os.path.exists(localfolder):
    os.makedirs(localfolder)
if not os.path.exists(localimagefolder):
    os.makedirs(localimagefolder)

with open(filename, 'rU') as csvfile:
    next(csvfile, None) #skip header row
    reader = csv.reader(csvfile, delimiter=',', dialect=csv.excel_tab)

    qr = qrcode.QRCode(
        version=1,
        error_correction=qrcode.constants.ERROR_CORRECT_L,
        box_size=10,
        border=4,
    )

    for i, row in enumerate(reader):
        labeldata = row[0] #Choose first column of data to create QR codes
        print labeldata

        qr.add_data(org+"-"+labeldata)
        qr.make()

        img = qr.make_image()
        img.save(localimagefolder+"/"+org+"-"+labeldata+".png".format(i)) #Save image

test.csv实际上只是一个三列文件,如下所示:

ID      FirstName      LastName
813     Aaron          Zobrist
64      Adam           Young
871     Alana          Yarnell
728     Alexandra      Wilson
980     Ali            Williams
118     Alicia         Wilderman
51      Alonzo         Wilcox
902     Alphonso       Whitehouse
915     Amanda         Wharton

足够我的目的,只需在脚本中使用人员的主ID创建一个基于org变量的QR码。如果您运行该脚本,一切都应该运行良好 - 除了当您实际读取QR码时,所有这些ID都聚合在一起而不是单独聚合。

这是来自文件的第一个QR码(ID:813),它返回一个完美的结果(1234-813)。但它只返回正确的代码,因为它是第一个:

here

这里的最后一个(ID:915)似乎也错误地包含了所有其他ID(你也可以从尺寸中看到):

enter image description here

当您阅读此代码时,返回的是" 1234-8131234-641234-8711234-7281234-9801234-1181234-511234-9021234-915"而不是应该是什么:" 1234-915"。

希望这只是我在脚本中找不到的一个愚蠢的错误。有人可以帮忙吗?谢谢!

1 个答案:

答案 0 :(得分:0)

qr.add_data()似乎会向现有qr添加数据。按如下方式构造代码会更有意义:

import csv
import qrcode
import os

org = "1234"
filename = '/Users/Ryan/Download/test.csv'
localfolder = '/Users/Ryan/Download/'+org
localimagefolder = localfolder+'/image'

if not os.path.exists(localfolder):
    os.makedirs(localfolder)
if not os.path.exists(localimagefolder):
    os.makedirs(localimagefolder)

with open(filename, 'rU') as csvfile:
    next(csvfile, None) #skip header row
    reader = csv.reader(csvfile, delimiter=',', dialect=csv.excel_tab)

    for i, row in enumerate(reader):
        labeldata = row[0] #Choose first column of data to create QR codes
        print labeldata

        qr = qrcode.QRCode(
            version=1,
            error_correction=qrcode.constants.ERROR_CORRECT_L,
            box_size=10,
            border=4,
        )

        qr.add_data(org+"-"+labeldata)
        qr.make()

        img = qr.make_image()
        img.save(localimagefolder+"/"+org+"-"+labeldata+".png".format(i)) #Save image

通过这样做,您将在循环的每次迭代中使用新的QRCode()对象。