将图像和数据从 csv 文件插入到 xlsx 文件

insert images and data from csv file to xlsx file

大家好,我是 Python 的新手,我遇到了一个问题,希望您能帮助我。

我正在使用 Raspberry Pi 拍照,然后将它们保存到特定文件,而且我在 csv 文件中有一个数据,我想做的是从该文件夹中获取图像,然后将它们保存到特定单元格也与数据相同。 假设图像 1 保存在 row1 col1 中的数据。问题是,我不知道 csv 文件中将包含多少数据以及多少图像,但图像的数量始终与 csv 文件中的数据数量相同。我的代码如图:

import xlsxwriter
import csv

csvFile = open('k1.csv')
csvfileReader = csv.reader(csvFile)

for row in csvfileReader:
workbook = xlsxwriter.Workbook('k.xlsx')
worksheet = workbook.add_worksheet('sheet1')
worksheet.set_column('B:B', 10)
worksheet.set_column('A:A', 15)
worksheet.write('A1',row[0] )
worksheet.write('B1',row[1] )
worksheet.write('C1',row[2] )
worksheet.write('A10',row[0] )
worksheet.write('B10',row[1] )
worksheet.write('C10',row[2] )

worksheet.insert_image('D1', "1.png" , {'x_scale': 0.3, 'y_scale': 0.3})
worksheet.insert_image('D10', "2.png", {'x_scale': 0.3, 'y_scale': 0.3})

workbook.close()

我得到的结果如下图所示:

如果我有超过 30 个图像和名称(数据),我想知道如何将更多图像和数据插入到 xlsx 文件中

您可以在 .write() 函数中指定行号和列号(从零开始索引),而不是使用 A1 表示法。添加 Python 的 enumerate() 函数,它将为您提供一个计数器 rowy,您可以将其用作行号。

假设您的 k1.csv 文件如下所示:

Image 1,trki,present
Image 2,Tgjkt,present
Image 3,Abcd,not present

它将从此文件中读取每一行并将其放入 XLSX 文件中的不同行中。在您的示例中,每行间隔第 9 行,因此 * 9 乘以所使用的行号,如果您想要连续的行,可以删除它。

import xlsxwriter
import csv

workbook = xlsxwriter.Workbook('k.xlsx')
worksheet = workbook.add_worksheet('sheet1')

worksheet.set_column('A:A', 15)
worksheet.set_column('B:B', 10)

with open('k1.csv', newline='') as csv_file:
    csv_reader = csv.reader(csv_file)

    for rowy, row in enumerate(csv_reader):
        worksheet.write(rowy * 9, 0, row[0])
        worksheet.write(rowy * 9, 1, row[1] )
        worksheet.write(rowy * 9, 2, row[2] )
        worksheet.insert_image(rowy * 9, 3, "1.png" , {'x_scale': 0.3, 'y_scale': 0.3})

workbook.close()            

如果您仍在使用 Python 2.x,请更改此行:

with open('k1.csv', 'rb') as csv_file:

注意:如果脚本再次 运行,它将用新文件覆盖现有的 k.xlsx。它不会将新信息附加到末尾。因此,如果您的 CSV 文件只包含一行,它似乎只写入第一行。

要在每次脚本 运行 时附加新信息,您需要读入现有文件,确定最后使用的行号,然后从此时开始写入新项目。 xlsxwriter 库无法做到这一点,它只能写入新文件。您需要使用 openpyxl 库来执行此操作。