gpt4 book ai didi

python - 使用 Openpyxl 条件解析和输出 xlsx 文件

转载 作者:行者123 更新时间:2023-11-28 21:23:52 27 4
gpt4 key购买 nike

我正在为一个研究项目处理数据。输出为 .csv 文件形式,已转换为 .xlsx 文件。每个参与者都有一个单独的输出文件,每个文件包含大约 40 个不同测量值的数据,涉及几十个(左右)刺激。为了使收集的数据有意义,我们需要分别查看每个刺激和相关的相关测量。每个输出文件都很大(50 列 x 60000 行)。我希望使用 openpyxl 来解析数据库,以在具有特定字符串值的预先指定的列中搜索单元格。找到这样的单元格后,将该单元格与同一行中的其他指定列一起写入新工作簿。

例如,解析下表,我尝试使用 openpyxl 在 A 列中搜索“Slide 2”。当为特定行找到此值时,该单元格将与同一行的 C 列和 D 列中的值一起写入新工作簿。

    A          B       C       D

1 Slide Data1 Data2 Data3

2 Slide 1 1 2 3

3 Slide 2 4 5 6

4 Slide 2 7 8 9

会写:

    A          B       C       D

2 Slide 2 5 6

3

4

...或一些类似的格式。

我还希望用下一个文件中的数据填充 D 和 E 列,并用之后文件中的数据填充 F 和 G(依此类推),但我可能可以弄清楚这一部分。

我试过:

from openpyxl import load_workbook

wb = load_workbook(filename = r'test108.xlsx')

ws = wb.worksheets[0]

dest_filename = r'output.xlsx'

for x in range (0, 100): #0-100 as proof of concept before parsing entire worksheet
if ws.cell(row = x, column =26) == ‘some_image.jpg':
print (ws.cell(row =x, column =26), ws.cell(row = x, column = 10), ws.cell(row = x, column = 17))

wb.save = dest_filename

还添加以下内容以尝试在内存中创建工作表以在其中操作单元格:

for i in range (0, 30):
for j in range (0, 100):
print (ws.cell(row =i, column=j))

...两者都有微小的变化,但它们都输出原始文件的副本。

我已经阅读并重新阅读了 openpyxl 的文档,但无济于事。这里的论坛好像也没有类似的问题。

任何关于正确操作和写入数据的见解都将不胜感激。我也希望这可以帮助其他人试图理解庞大的数据集。提前致谢!

我在 Windows 7 上运行 Python3.3.2(64 位)和 openpyxl-1.6.2。数据最初为 .csv 格式,因此如果有帮助,可以将其导出为 .xls 或其他格式。我简要地研究了 xlutils(使用 xlwt 和 xlrd),但是 openpyxl 与 xlsx 文件一起工作得更好。


编辑

非常感谢@MikeMüller 指出我需要两个工作簿来传输数据。这更有意义。

我现在有以下内容,但它仍然返回一个空工作簿。原始单元格不是空白的。 (注释行是为了简化——当然没有缩进——但代码无论如何都不成功。)

import openpyxl

wb = openpyxl.load_workbook(filename = r'test108.xlsx')
ws = wb.worksheets[0]

wb_out = openpyxl.Workbook()
ws_out = wb_out.worksheets[0]

#n = 1

#for x in range (0, 1000):
#if ws.cell(row = x, column = 27) == '7.image2.jpg':
ws_out.cell(row = n, column = 1) == ws.cell(row = x, column = 26) #x changed
ws_out.cell(row = n, column = 2) == ws.cell(row = x, column = 10) #x changed
ws_out.cell(row = n, column = 3) == ws.cell(row = x, column = 17) #x changed
#n += 1

wb_out.save('output108.xlsx')

编辑2

我已经更新了代码以包含单元格的 .value,但它仍然返回空白工作簿。

import openpyxl

wb = openpyxl.load_workbook(filename = r'test108.xlsx')
ws = wb.worksheets[0]

wb_out = openpyxl.Workbook()
ws_out = wb_out.worksheets[0]

n = 1

for x in range (0, 1000):
if ws.cell(row=x, column=27).value == '7.Image001.jpg':
ws_out.cell(row=n, column=1).value = ws.cell(row=x, column=27).value
ws_out.cell(row=n, column=2).value = ws.cell(row=x, column=10).value
ws_out.cell(row=n, column=3).value = ws.cell(row=x, column=17).value
n += 1

wb_out.save('output108.xlsx')

总结给下一个遇到麻烦的人:

您需要在内存中创建两个工作表。一个用于导入您的文件,另一个用于写入新的工作簿文件。

使用 cell.value 调用函数将输入的文本拉入导入工作簿的每个单元格,并设置它 = 导出工作簿中所需的单元格。

确保从零开始计算行和列。

最佳答案

您的单元格分配不正确。这是应该起作用的:

import openpyxl

wb = openpyxl.load_workbook(filename = r'test108.xlsx')
ws = wb.worksheets[0]

wb_out = openpyxl.Workbook()
ws_out = wb_out.worksheets[0]

n = 1

for x in range (0, 1000):
if ws.cell(row=x, column=27).value == '7.image2.jpg':
ws_out.cell(row=n, column=1).value = ws.cell(row=x, column=26).value #x changed
ws_out.cell(row=n, column=2).value = ws.cell(row=x, column=10).value #x changed
ws_out.cell(row=n, column=3).value = ws.cell(row=x, column=17).value #x changed
n += 1

wb_out.save('output108.xlsx')

关于python - 使用 Openpyxl 条件解析和输出 xlsx 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16851167/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com