当前位置: 首页 > 知识库问答 >
问题:

使用Openpyxl对xlsx文件进行条件解析和输出

冯鸿哲
2023-03-14

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

例如,在解析下表时,我尝试使用openpyxl搜索列A中的“幻灯片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')

下一个有问题的人的总结:

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

使用手机。value call函数可提取输入到导入工作簿的每个单元格中的文本,并将其设置为导出工作簿中所需的单元格。

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

共有2个答案

宰父跃
2023-03-14

您需要打开第二个笔记本进行书写:

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

把这个放在你的循环中:

ws_out.cell('cell indices here').value = desired_value

保存您的文件:

writer = openpyxl.ExelWriter(workbook=wb_out)
writer.save(dest_filename)
邹普松
2023-03-14

您正在错误地进行单元格分配。以下是应该起作用的:

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')
 类似资料:
  • 因此,我一直在使用Python3.2和OpenPyXL的iterable工作簿,如这里的“优化阅读器”示例所示。 当我尝试使用此策略读取从简单文档中提取的一个或多个文件时,就会出现问题。zip存档(手动和通过python zipfile包)。当我调用我得到“A”和我得到1,当要求打印每个单元格的值时,如下所示: 它打印A1、A2、A3、A4、A5、A6和A7中的值,而不管文件实际有多大。文件本身没

  • 我正在使用openpyxl导入/导出xlsx文件。 但是我不能导入我用openpyxl导出的文件。 我必须在Excel中打开导出的xlsx文件,更改导入的xlsx文件的一些值并保存它(它的大小也会改变(例如:从148 Ko到180 Ko)。然后我可以用openpyxl导入它。 我认为,有一个问题,在出口,因为后保存手动导入作品。 谢谢

  • 本文向大家介绍python操作xlsx文件的包openpyxl实例,包括了python操作xlsx文件的包openpyxl实例的使用技巧和注意事项,需要的朋友参考一下 Python扩展库openpyxl,可以操作07版以上的xlsx文件。可以创建工作簿、选择活动工作表、写入单元格数据,设置单元格字体颜色、边框样式,合并单元格,设置单元格背景等等。 需要增加可以颜色进入包安装目录的 修改colors

  • 我已经为用户创建了多个文件上传选项。我想对上传的文件进行编码和解码...在这里,我编写了将图像转换为base64字符串的程序...如何使用 base64 对文件进行编码和解码。 我的代码是 在控制台中我打印文件的编码值…如何使用控制台输出进行解码。

  • 本文向大家介绍详解Android使用Socket对大文件进行加密传输,包括了详解Android使用Socket对大文件进行加密传输的使用技巧和注意事项,需要的朋友参考一下 前言 数据加密,是一门历史悠久的技术,指通过加密算法和加密密钥将明文转变为密文,而解密则是通过解密算法和解密密钥将密文恢复为明文。它的核心是密码学。 数据加密目前仍是计算机系统对信息进行保护的一种最可靠的办法。它利用密码技术对信

  • 我是开发kafka-streams应用程序的新手。我的流处理器用于根据输入json消息中的用户键值对json消息进行排序。 我读到这里动态连接一个Kafka输入流到多个输出流,没有动态解决方案。 在我的用例中,我知道对输入流排序所需的用户键和输出主题。因此,我编写了针对每个用户的单独的处理器应用程序,其中每个处理器应用程序匹配不同的用户ID。 所有不同的流处理器应用程序都从kafka中的相同jso