【问题标题】:None values after reading more than 10000 rows of .xlsx file in openpyxl在 openpyxl 中读取超过 10000 行 .xlsx 文件后没有值
【发布时间】:2023-03-27 20:39:02
【问题描述】:

我正在开发一个应用程序,该应用程序可以使用 Openpyxl 读取大型 .xlsx(超过 20000 行),并且可以使用这些数据进行一些基本计算。我尝试在下面的示例中读出 20000 行。当我在 Windows 的命令提示符中运行此代码时,输​​出很好,但是当我在 linux 终端或 PyCharm 终端中运行它时,10000 后的输出变为无。

我已经尝试将 load_workbook read_only 参数更改为 True,但这完全破坏了应用程序的性能

from openpyxl import *

wb = load_workbook(filename="wind_data.xlsx", read_only=False)
ws = wb.active

output_data = [ws.cell(row=i, column=2).value for i in range(2, 20002)]

for i in range(0, len(output_data)):
    print(str(i+1) + " : " + str(output_data[i]))

我期望从这段代码中得到的输出结果是:

19998 : 6
19999 : 6
20000 : 6

但是我得到了:

19998 : None
19999 : None
20000 : None

【问题讨论】:

  • 您是否仔细检查过两台计算机上的文件是否完全相同? openpyxl 不使用特定于平台的代码,因此行为将是相同的。此外,使用ws.cell() 是您在只读模式下的问题。对于此类任务,请始终使用ws.iter_rows()

标签: python openpyxl xlsx


【解决方案1】:

我建议对非常大的集合使用生成器理解。

output_data = (ws.cell(row=i, column=2).value for i in range(2, 20002))

这可能对您的情况有所帮助。我在我的 linux 上对其进行了测试,它在超过 20k 行的 excel 上运行良好。 其次,当您想通过此类集合进行迭代并且还具有索引使用功能时:

枚举(收集)

喜欢:

for i, val in enumerate(output_data):
    print('{} : {}'.format(i+1, val)

【讨论】:

  • 我尝试了这种方法,但在 PyCharm 和 linux 机器上都没有任何区别。但感谢您的提示。
  • 我在带有 Ubuntu 的虚拟机和带有 Manjaro 的笔记本电脑上运行它,两者都返回了相同的输出。虽然 Windows 终端运行它没有问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-19
  • 2021-08-27
  • 1970-01-01
  • 2017-06-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多