Python 将一个文件重新生成另一个文件
我用过图书馆。首先,我在某些页面上从pdf输出一个表。然后我遍历表中的所有行,并将行数据添加到工作表中Python 将一个文件重新生成另一个文件,python,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
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
但结果是,我得到了最后一个指定的页面,而不是全部页面。我想错误在原始遍历中。但以什么方式
表中显示了所需的所有页面。但在raw中,它是最后一个。编辑答案以回应用户的评论。通过删除隐藏的垂直线改进了表提取。为了在缺少最左边的列的页面上保留表的结构,可以在写入Excel之前将缺少的单元格添加到左边的行中来处理。我假设所需的列数为6,并且只缺少最左边的列。更新后的代码将变为:
导入pdfplumber
从openpyxl导入工作簿
def保持_可见_线(obj):
“”“如果对象是隐藏线,请将其删除。”“”
如果obj[“对象类型”]=“矩形”:
返回对象[“非笔划颜色”]==0
返回真值
使用pdfplumber.open(“Pdffile.pdf”)作为pdf:
工作簿=工作簿()
工作表=工作簿。活动
对于pdf.pages中的页面:
page=page.filter(保持行可见)
table=第页摘录表格()
对于表中的行:
表.追加(([无]*(6-列(行)))+行)
工作簿.save(“Excel1.xlsx”)
原创
用于写入工作表的for循环位于page for循环之外。以下代码将修复此问题
导入pdfplumber
从openpyxl导入工作簿
使用pdfplumber.open(“Pdffile.pdf”)作为p:
工作簿=工作簿()#新的空白Excel工作簿
工作表=工作簿.active#激活工作表
对于范围(4,6)内的i:#遍历4页到6页
第页=第页[i]
table=page.extract_table()#提取表格数据
打印(表格)
对于表中的行:#遍历所有行
打印(行)
表.追加(行)#按行追加写入数据
工作簿.save(“Excel1.xlsx”)#保存名为Excel的文件
打印(“第一个%d页PDF提取完成”%i)#提示提取进度
我明白了。非常感谢你。我能再问你一件事吗?例如,如果输出带有专业方向号的页面,如第一页01.03.04,则当以csv格式输出时,下一个没有此类编号的页面将向左移动1列。我能解决这个问题吗?@没人是的,这是可行的。我编辑了我的原始答案来反映这一点。哦,我明白了。但是,有没有可能控制我想以这种方式显示哪些页面?请您详细说明一下,我没有投票权。但我接受这个答案。非常感谢。