亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從多個 PDF 中提取文本并寫入單個 CSV

從多個 PDF 中提取文本并寫入單個 CSV

Cats萌萌 2022-08-16 16:24:42
我想遍歷目錄中的所有PDF,使用PDFminer從每個PDF中提取文本,然后將輸出寫入單個CSV文件。我能夠通過將文本傳遞給此處定義的函數來單獨從每個PDF中提取文本。我還能夠獲得給定目錄中所有PDF文件名的列表。但是,當我嘗試將兩者放在一起并將結果寫入單個CSV時,我得到了一個帶有標頭但沒有數據的CSV。這是我的代碼:import ospdf_files = [name for name in os.listdir("C:\\My\\Directory\\Path") if name.endswith(".pdf")] #get all files in directory    pdf_files_path = ["C:\\My\\Directory\\Path\\" + pdf_files[i] for i in range(len(pdf_files))] #add directory pathimport pandas as pddf = pd.DataFrame(columns=['FileName','Text'])for i in range(len(pdf_files)):    scraped_text = convert_pdf_to_txt(pdf_files_path[i])    df.append({ 'FileName': pdf_files[i], 'Text': scraped_text[i]},ignore_index=True)df.to_csv('output.csv')變量具有以下值:pdf_files: ['12280_2007_Article_9000.pdf', '12280_2007_Article_9001.pdf', '12280_2007_Article_9002.pdf', '12280_2007_Article_9003.pdf', '12280_2007_Article_9004.pdf', '12280_2007_Article_9005.pdf', '12280_2007_Article_9006.pdf', '12280_2007_Article_9007.pdf', '12280_2007_Article_9008.pdf', '12280_2007_Article_9009.pdf']pdf_files_path: ['C:\\My\\Directory Path\\12280_2007_Article_9000.pdf', etc...]Empty DataFrameColumns: [FileName, Text]Index: []更新:根據@AMC的建議,我在循環中檢查了scraped_text的內容。對于“文本”列,似乎我正在循環遍歷第一個PDF文件中的字符,而不是直接循環遍歷每個文件。此外,循環的內容不會寫入數據幀或 CSV。12280_2007_Article_9000.pdf E12280_2007_Article_9001.pdf a12280_2007_Article_9002.pdf s12280_2007_Article_9003.pdf t12280_2007_Article_9004.pdf  12280_2007_Article_9005.pdf A12280_2007_Article_9006.pdf s12280_2007_Article_9007.pdf i12280_2007_Article_9008.pdf a12280_2007_Article_9009.pdf n
查看完整描述

1 回答

?
慕尼黑的夜晚無繁華

TA貢獻1864條經驗 獲得超6個贊

我想你不需要這個。您可以使用標準庫 csv 使其更簡單。pandas

如果您使用的是Python 3.4 +,另一件可以改進的事情是用pathlib替換。os

下面是一個幾乎完整的示例:

import csv

from pathlib import Path



folder = Path('c:/My/Directory/Path')

csv_file = Path('c:/path/to/output.csv')


with csv_file.open('w', encoding='utf-8') as f:

    writer = csv.writer(f, csv.QUOTE_ALL)


    writer.writerow(['FileName', 'Text'])


    for pdf_file in folder.glob('*.pdf'):

        pdf_text = convert_pdf_to_txt(pdf_file).replace('\n', '|')

        writer.writerow([pdf_file.name, pdf_text]) 

要記住的另一件事是確保將是一行,否則您的文件將會損壞。解決此問題的一種方法是選擇任意字符來代替新行標記。例如,如果您選擇管道字符,則可以在以下操作之前執行類似操作:pdf_textcsvwriter.writerow


pdf_text.replace('\n', '|')

它不是一個完整的例子,而是一個起點。我希望它有幫助。


查看完整回答
反對 回復 2022-08-16
  • 1 回答
  • 0 關注
  • 134 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號