Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将一个文件重新生成另一个文件_Python - Fatal编程技术网

Python 将一个文件重新生成另一个文件

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

我用过图书馆。首先,我在某些页面上从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
但结果是,我得到了最后一个指定的页面,而不是全部页面。我想错误在原始遍历中。但以什么方式


表中显示了所需的所有页面。但在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列。我能解决这个问题吗?@没人是的,这是可行的。我编辑了我的原始答案来反映这一点。哦,我明白了。但是,有没有可能控制我想以这种方式显示哪些页面?请您详细说明一下,我没有投票权。但我接受这个答案。非常感谢。