2017-08-17 43 views
2

我有一个Python脚本,我认为一开始工作正常;它基本上为一个组织创建一个文件夹,抓取一个csv,并使用该csv的第一列创建QR码(与组织名称连接),它存储在该组织的“图像”文件夹中。Python从CSV数据错误地创建聚集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) 

    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 

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

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

here

这里的最后一个(ID:915),这似乎不正确地将所有的其他ID,以及(你也可以从看大小):

enter image description here

当你读到这段代码,返回的是“1234-8131234-641234-8711234-7281234-98-1181234-511234-9021234-915”,而不是它应该是什么:“ 1234-915" 。

希望这只是一个愚蠢的错误,我无法在脚本中找到。任何人都可以帮忙吗?谢谢!

回答

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()对象工作。