将csv文件中的图像和数据插入xlsx文件

问题描述 投票:0回答:1

大家好我是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()

我得到的结果如下所示:here is my results

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

python image csv xlsx
1个回答
1
投票

您可以在A1函数中指定行和列编号(零索引),而不是使用.write()表示法。添加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库来执行此操作。

© www.soinside.com 2019 - 2024. All rights reserved.