2017-08-17 41 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()對象工作。