将图像和数据从 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
库来执行此操作。
大家好,我是 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
库来执行此操作。