Python - 将 header 插入 csv

Python - inserting header into a csv

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

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

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)])

我尝试过的另一种方法同样不成功。我尝试先将 header 写入 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)])

我们非常欢迎任何关于应对这一挑战的解决方法或更好方法的建议。

您可以先打开 csv,插入您的 header,然后遍历您的 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)])