gpt4 book ai didi

python - 将数据从 PDF 格式转换为 CSV

转载 作者:行者123 更新时间:2023-11-28 19:17:44 25 4
gpt4 key购买 nike

我正在尝试将在多个可填写的 pdf 表单中输入的数据转换为一个 csv 文件。
此代码包含几个步骤:

  1. 打开新的 .csv 文件(标题行)
  2. 使用“for...in”循环打开多个 pdf 表单
  3. 将表单域中输入的数据转换为 csv

但是,当运行命令时我收到错误:

fc-int01-generateAppearances: None
Traceback (most recent call last):
File "C:\Python27\Scripts\test3.py", line 31, in <module>
writer.writerow(value)
_csv.Error: sequence expected

如果我只是在 python 中打印值(表单数据),它就可以工作。但是导入数据不会。从行到列的值可能还有一个问题。我希望我是清楚的。

这是我的代码:

import glob
import os
import sys
import csv
from pdfminer.pdfparser import PDFParser
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdftypes import resolve1

#input file path for specific file
#filename = "C:\Python27\Scripts\MH_1.pdf"
#fp = open(filename, 'rb')

#open new csv file
out_file=open('C:\Users\Wonen\Downloads\Test\output.csv', 'w+')
writer = csv.writer(out_file)
#header row
writer.writerow(('Name coordinator', 'Date', 'Address', 'District',
'City', 'Complaintnr'))

#enter folder path to open multiple files
path = 'C:\Users\Wonen\Downloads\Test'
for filename in glob.glob(os.path.join(path, '*.pdf')):
fp = open(filename, 'rb')
#read pdf's
parser = PDFParser(fp)
doc = PDFDocument(parser)
#doc.initialize() # <<if password is required
fields = resolve1(doc.catalog['AcroForm'])['Fields']
for i in fields:
field = resolve1(i)
name, value = field.get('T'), field.get('V')
print '{0}: {1}'.format(name, value)
writer.writerow(value)

使用 print (repr(value)) 的带有文本 pdf 的输出(包括所有输出):

None
'Crip Gang'
None
None
None
/Ja
None
/1
/1
None
None
/Ja
/Ja
None
None
None
'wfwf'
'sd'
'dfwf'
'ffasf'
'tsdbd'
'dfadfasdf'
None
'df'
None
'asdff'
None
'wff'
None
'ffs'
None
None
None
None
None
None
None
None
None
None
None
'1'
'2'
'7'
/0
'Ja'
'Two unlimited'
'Captain Jack'
None
'www.kijkbijmij.nl'
'Onderverhuur'
/Ja

等etc. “None”代表“空文本框”; “1”和“0”代表"is"和“否”输出。

最佳答案

尝试更改代码的最后一部分,如下所示:

    .
.
.
#enter folder path to open multiple files
path = 'C:\Users\Wonen\Downloads\Test'
for filename in glob.glob(os.path.join(path, '*.pdf')):
fp = open(filename, 'rb')
#read pdf's
parser = PDFParser(fp)
doc = PDFDocument(parser)
#doc.initialize() # <<if password is required
fields = resolve1(doc.catalog['AcroForm'])['Fields']
row = []
for i in fields:
field = resolve1(i)
name, value = field.get('T'), field.get('V')
row.append(value)
writer.writerow(row)

out_file.close()

目前尚不清楚这是否有效,但它可能会为您提供解决问题所需的信息。

一个令人困惑的事情是对于 csv 的第一个标题行:

writer.writerow(('Name coordinator', 'Date', 'Address','District','City', 'Complaintnr'))

定义写入的每一行中将包含多少个字段值。这意味着 fields 应该是一个列表,其中包含按顺序排列的这 6 个项目的数据。

您需要弄清楚如何将每组 fields 中的内容转换为包含 6 个数据项的 row 列表。这就是我答案中的代码所做的 — 我认为,但无法测试。

关于python - 将数据从 PDF 格式转换为 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31521403/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com