python - 将一个文件重新制作成另一个文件
问题描述
我使用了图书馆。首先,我在某些页面上从 pdf 输出一个表格。然后我遍历表中的所有行并将行数据添加到工作表中。
import
from openpyxl import Workbook
with pdfplumber.open("Pdffile.pdf") as p:
workbook = Workbook() # New blank Excel workbook
sheet = workbook.active # activation sheet
for i in range(4,6): # Traverse 4 pages-6 page
page = p.pages[i]
for row in table: # Traverse all rows
print(row)
sheet.append(row) # Append write data by row
workbook.save("Excel1.xlsx") # Save file named Excel
print("The first%d page PDF Extraction complete" % i) # Prompt extraction progress
但结果,我得到了最后一个指定的页面,而不是全部。我想错误是在原始遍历中。但以什么方式?
在表格中显示了所有需要的页面。但在原始的,它是最后一个。
解决方案
根据OP的评论编辑答案。通过删除隐藏的垂直线改进了表格提取。为了在缺少最左侧列的页面上保留表格的结构,您可以通过在写入 Excel 之前将缺失的单元格添加到左侧的该行来处理该问题。我假设所需的列数是 6,并且只有最左边的列会丢失。更新后的代码将变为:
import pdfplumber
from openpyxl import Workbook
def keep_visible_lines(obj):
"""If the object is a hidden line, remove it."""
if obj["object_type"] == "rect":
return obj["non_stroking_color"] == 0
return True
with pdfplumber.open("Pdffile.pdf") as pdf:
workbook = Workbook()
sheet = workbook.active
for page in pdf.pages:
page = page.filter(keep_visible_lines)
table = page.extract_table()
for row in table:
sheet.append(([None] * (6 - len(row))) + row)
workbook.save("Excel1.xlsx")
原来的
用于写入工作表的 for 循环位于页面 for 循环之外。以下代码将解决该问题。
import pdfplumber
from openpyxl import Workbook
with pdfplumber.open("Pdffile.pdf") as p:
workbook = Workbook() # New blank Excel workbook
sheet = workbook.active # activation sheet
for i in range(4,6): # Traverse 4 pages-6 page
page = p.pages[i]
table = page.extract_table() # Extract table data
print(table)
for row in table: # Traverse all rows
print(row)
sheet.append(row) # Append write data by row
workbook.save("Excel1.xlsx") # Save file named Excel
print("The first%d page PDF Extraction complete" % i) # Prompt extraction progress
推荐阅读
- r - 使用循环计算两个数据矩阵的误差
- arrays - 带有空数组的 Swift ui 选择器在调用初始化程序时没有完全匹配
- python - 在简单的 django-admin 应用程序中找不到媒体文件
- html - Bootstrap 5 选项卡导航在 Firefox 和 Internet Explorer 中不起作用
- json - 在 Terraform 中从 Json 解码生成 Markdown 文件
- node.js - 使用 Node.JS 从二进制响应生成损坏的 Zip 文件
- arrays - 使用 Laravel(或普通 SQL)在 JSON 列中搜索,其中键包含由单个空格分隔的值
- anaconda - 无法为 Anaconda spyder 加载 swrast
- python - 线程不工作?获取 typeerror 'bool' 对象不可调用
- javascript - ReactJS:表单中的单选按钮