上述程序无法运行,报错内容为:Traceback (most recent call last): File "D:\PyCharm 2022.3.3\pythonProject\引证文献标准化处理.py", line 60, in <module> process_xlsx_file(aaaaa) File "D:\PyCharm 2022.3.3\pythonProject\引证文献标准化处理.py", line 7, in process_xlsx_file wb = load_workbook(filename=aaaaa, use_iterators=True) TypeError: load_workbook() got an unexpected keyword argument 'use_iterators'
时间: 2024-04-22 10:28:06 浏览: 261
非常抱歉,我之前给出的建议中的load_workbook()`函数的`use_iterators`参数是错误的。实际上,`use_iterators`参数在`load_workbook()`函数中是不存在的。
对于你的问题,可以尝试以下优化方法:
1. 使用`iter_rows()`方法:使用`iter_rows()`方法一次性获取多个行,然后进行批量操作。这样可以减少对单个单元格的操作次数。
2. 使用内存映射模式:对于大型xlsx文件,使用内存映射模式可以减少内存消耗。你可以尝试使用`openpyxl`库的`openpyxl.workbook.Workbook`函数来打开文件,这样可以使用内存映射模式。
下面是更新后的代码:
```python
from openpyxl import load_workbook
import os
def process_xlsx_file(aaaaa):
# 使用内存映射模式打开xlsx文件
wb = load_workbook(filename=aaaaa, read_only=True)
print('检查点1')
# 删除名为"文献导出—Excel格式"的表格
if "文献导出—Excel格式" in wb.sheetnames:
wb.remove(wb["文献导出—Excel格式"])
print('检查点2')
# 获取名为"拆分结果"的表格
sheet = wb["拆分结果"]
print('检查点3')
# 处理U列的数据
max_row = sheet.max_row
rows = sheet.iter_rows(min_row=2, max_row=max_row, values_only=True)
new_rows = [] # 存储处理后的行数据
for row in rows: # 从第2行开始,跳过表头
cell_value = row[20] # U列的索引为20
# 如果U列单元格中不包含字符"[J]",则跳过该行
if cell_value is None or "[J]" not in cell_value:
continue
print('检查点4')
# 删除U列单元格中的空格
row = list(row) # 将元组转换为列表以修改值
row[20] = cell_value.replace(" ", "")
print('检查点5')
# 分割U列单元格,并将分割结果保存在U列后面的列中,分隔符为"."
split_values = cell_value.split(".")
row.extend(split_values)
print('检查点6')
new_rows.append(row)
# 保存处理后的xlsx文件
wb = load_workbook(filename=aaaaa) # 重新加载文件以进行写入操作
sheet = wb["拆分结果"]
sheet.delete_rows(2, max_row) # 删除原有数据
for row in new_rows:
sheet.append(row)
file_name = os.path.basename(aaaaa) # 获取原文件名
new_file_name = file_name.split(".xlsx")[0] + "引证文献标准化.xlsx" # 新文件名
wb.save(new_file_name)
print('检查点7')
aaaaa = r'D:\【科研】\【全学科引文数据集】\【3.拆分引证文献】\AAAtest.xlsx'
process_xlsx_file(aaaaa)
```
请注意,这些优化方法可能会对代码的可读性和可维护性造成一些影响,因此在优化代码之前,请确保你对代码进行了适当的测试和验证。如果还有其他问题,请随时提问。
阅读全文