首页 > 解决方案 > 如何使用 python 创建和编写递增的 .png 文件?

问题描述

我目前正在尝试为字典的键生成二维码。如果我只为一个键尝试,那根本没问题。但是,如果我尝试自动化该过程,为每个键增加我的文件编号,我只会生成空的 .png 文件。

对于一次一个二维码,我的代码可以正常工作,如下所示: import cv2 import os import qrcode

test = {
    1: { "gene": "aox1a", "construct": "2-23", "line": "8" },
    2: { "gene": "aox1a", "construct": "2-23", "line": "8 " },
    3: { "gene": "aox1a", "construct": "2-23", "line": "8" }
}


data = "This is plant 1", test[1]
# output file name
filename = "plant1.png"
# generate qr code
img = qrcode.make(data)
# save img to a file
img.save(filename)

像这样,我生成一个包含所需二维码的 .png 文件,上面写着:“这是植物 1', {'gene':'aox1a' .....}) 如果我尝试使用循环进行自动化,它看起来像这样:

for i in test.keys():
    data=test[i]
    print(test[i])
    i = 0
    while os.path.exists("pic%s.png" % i):
        i += 1
    filename = open("pic%s.png" % i, "w")

这就是我的代码可以正常工作的地方。但是,我不知道我怎么不能选择这些文件并放入我的二维码。如果我尝试像以前一样添加图像,使用:

img = qrcode.make(data)
# save img to a file
img.save(filename)

它会告诉我“write() 参数必须是 str,而不是字节”。

任何人都可以帮忙吗?已经谢谢了!

标签: python

解决方案


在您的第一个代码中,文件名是一个字符串。在 for 循环中,您打开文件并使文件名成为文件的句柄。这对我有用:

import os import qrcode

test = {
    1: { "gene": "aox1a", "construct": "2-23", "line": "8" },
    2: { "gene": "aox1a", "construct": "2-23", "line": "8 " },
    3: { "gene": "aox1a", "construct": "2-23", "line": "8" } }

for i in test.keys():
    data = test[i]
    print(test[i])
    i = 0
    while os.path.exists("pic%s.png" % i):
        i += 1
    filename = "pic%s.png" % i
    img = qrcode.make(data)
    img.save(filename)

推荐阅读