我正在嘗試打開一個 zip 檔案并遍歷 zip 檔案中的 PDF。我想刮掉 pdf 中文本的特定部分。我正在使用以下代碼:
def get_text(part):
#Create path
path = f'C:\\Users\\user\\Data\\Part_{part}.zip'
with zipfile.ZipFile(path) as data:
listdata = data.namelist()
onlypdfs = [k for k in listdata if '_2018' in k or '_2019' in k or '_2020' in k or '_2021' in k or '_2022' in k]
for file in onlypdfs:
with data.open(file, "r") as f:
#Get the pdf
pdffile = pdftotext.PDF(f)
text = ("\n\n".join(pdffile))
#Remove the newline characters
text = text.replace('\r\n', ' ')
text = text.replace('\r', ' ')
text = text.replace('\n', ' ')
text = text.replace('\x0c', ' ')
#Get the text that will talk about what I want
try:
text2 = re.findall(r'FEES (. ?) Types', text, re.IGNORECASE)[-1]
except:
text2 = 'PROBLEM'
#Return the file name and the text
return file, text2
然后在下一行我運行:
info = []
for i in range(1,2):
info.append(get_text(i))
info
我的輸出只是第一個檔案和文本。我的 zip 檔案夾中有 4 個 PDF。理想情況下,我希望它遍歷 30 多個 zip 檔案。但我只有一個有問題。我以前看過這個問題,但解決方案不適合我的問題。與 with 陳述句有關嗎?
uj5u.com熱心網友回復:
您需要處理所有檔案并在迭代時存盤每個檔案。如何做到這一點的一個例子是將它們存盤在一個元組串列中:
file_list = []
for file in onlypdfs:
...
file_list.append((file, text2)
return file_list
然后你可以像這樣使用它:
info = []
for i in range(1,2):
list = get_text(i)
for file_text in list:
info.append(file_text)
print(info)
uj5u.com熱心網友回復:
當您在此行上使用 return 陳述句時:return file, text2,您退出 for 回圈,跳過您要閱讀的其他 pdf。
解決方案是將 return 陳述句移到 for 回圈之外。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/453933.html
