1

我正在开发一个脚本,该脚本通过循环从目录中的所有 pdf 文件中提取文本,并将它们插入到 csv 文件的各个单元格中。我可以成功地将输出写入单元格。但是,我需要 csv 文件包含"text"用于与另一个 csv 合并的标题。到目前为止,我插入该标题的尝试csv_writer遇到了困难。

例如,下面的代码成功地从 pdf 中提取和插入文本,但为每个提取的文件写入一个新的标题:

import pdfplumber
import csv
import glob

pdfs = glob.glob("dir\*.pdf")

for pf in pdfs:
    with pdfplumber.open(pf) as pdf, \
        open("pdf_output.csv", "a", newline="", encoding="utf-8") as f_output:

        csv_output = csv.writer(f_output)
        csv_output.writerow(['text']) # code for inserting header
        text = []

        for page in pdf.pages:
            extracted_text = page.extract_text()

            if extracted_text:  
                text.append(extracted_text)

        csv_output.writerow([' '.join(text)])

我尝试的另一种方法同样不成功。我尝试先将标头写入 csv,然后将循环的输出附加到 csv。但是,由于某种原因,pdf 输出的格式被完全破坏,文本分散在多个单元格而不是单个单元格中。

pdfs = glob.glob("dir\*.pdf")

# code for writing header
file = open("pdf_output.csv", "w", newline="")
writer = csv.writer(file)
headers = ['text']
writer.writerow(headers)

for pf in pdfs:
    with pdfplumber.open(pf) as pdf, \
        open("pdf_output.csv", "a", newline="", encoding="utf-8") as f_output:

        csv_output = csv.writer(f_output)

        text = []

        for page in pdf.pages:
            extracted_text = page.extract_text()

            if extracted_text:  
                text.append(extracted_text)

        csv_output.writerow([' '.join(text)])

任何有关此挑战的变通办法或更好方法的建议都将受到欢迎。

4

1 回答 1

2

您可以先打开 csv,插入标题,然后遍历 PDF:

import pdfplumber
import csv
import glob

pdfs = glob.glob("dir\*.pdf")

with open("pdf_output.csv", "a", newline="", encoding="utf-8") as f_output:
    csv_output = csv.writer(f_output)
    csv_output.writerow(['text'])
    
for pf in pdfs:
    with pdfplumber.open(pf) as pdf, \
    open("pdf_output.csv", "a", newline="", encoding="utf-8") as f_output:
 
        csv_output = csv.writer(f_output)
        text = []

        for page in pdf.pages:
            extracted_text = page.extract_text()

            if extracted_text:  
                text.append(extracted_text)

        csv_output.writerow([' '.join(text)])

或者只是检查它是否是第一次迭代:

import pdfplumber
import csv
import glob

pdfs = glob.glob("dir\*.pdf")

for i, pf in enumerate(pdfs):
    with pdfplumber.open(pf) as pdf, \
    open("pdf_output.csv", "a", newline="", encoding="utf-8") as f_output:
    
        csv_output = csv.writer(f_output)
        if i == 0: csv_output.writerow(['text'])

        text = []

        for page in pdf.pages:
            extracted_text = page.extract_text()

            if extracted_text:  
                text.append(extracted_text)

        csv_output.writerow([' '.join(text)])
于 2021-11-11T15:38:44.567 回答