[英]Generate a sequence in Python for barcoding items
我正在尝试在应用程序中生成条形码来标记产品,其中包括 3 件事:
像这样的东西:
def get(self, request, *args, **kwargs):
pk = self.kwargs['pk']
grn = Grn.objects.filter(pk=pk)[0]
grn_prod = grn.items.all()
items = []
for i in grn_prod:
for j in range(i.item_quantity):
items.append("YNT" + str(pk) + str(i.item.pk) + str(j + 1))
它生成如下序列:
YNT55232
这很好,但是在扫描它时,如果我想知道item ID
或Serial ID
,它就会成为一个问题,因为它可能是 23、523、3 等。
为此,我想为GRN
、 Product
和Serial Id
指定一个数字,如下所示:
GRN Barcode GRN ID Product ID Serial ID
YNT 000X 000X 0000X
我无法弄清楚在IDs
之前如何 append 0
?
您可以使用 Python 中的format
。 它通常用于格式化许多变量。
如果你想格式化这个: "YNT" + str(pk) + str(i.item.pk) + str(j + 1)
你可以使用如下format
:
'"YNT"\t{:04d}\t{:04d}\t{:05d}'.format(pk, i.item.pk, j+1)
如果您不知道; {}
用于每个变量,如format()
中的顺序。
由于您希望将pk
和i.item.pk
作为四个字符,因此添加:04d
。 :04d
用 0 完成单词。例如;
如果pk = 1
,则将其转换为0001
,或者如果为101
,则将其转换为0101
。
j+1
也是如此,如果j+1
为 1,则生成00001
,如果为101
,则生成00101
。
如果你没有使用过Python中的格式,建议你学习一下。 这对格式化变量非常有帮助。
zfill
function 正是这样做的。 str.zfill(5)
会将变量str
中的给定字符串填充到至少 5 个字符。
有不同的方法来实现字符串格式化。
查看上面提到的字符串 function zfill
的文档。 后面的方框解释:
printf使用%
运算符(取模)进行字符串格式化:
barcode = '%(gnr)03d%(product)03d%(serial)04d' % {'gnr': 123, 'product': 456, 'serial': 7890}
print(barcode)
产生YNT1234567890
。
您还可以将 Python 3 方式与f-strings一起使用:
# barcode components readable named
gnr = pk
product = i.item.pk
serial = j + 1
# format-literal simply will replace the variables named
barcode = f"YNT{gnr:03}{product:03}{serial:04}"
items.append(barcode)
它在变量名之后使用前缀:
:0x
用于左填充x前导零。注意:我总是清楚地命名模板变量(这里:条形码组件):
所以我们可以使用一个可读的模板,也称为格式文字,例如: "{component_1} before {component_2} then {the_rest}"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.