日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

统计当前文件夹下pdf文件的页码总数

發布時間:2023/12/14 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 统计当前文件夹下pdf文件的页码总数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文件夾下全是案卷的掃描的PDF掃描件,現在要根據掃描的PDF頁數向第三方服務公司支付掃描費用,但是怎么計算文件夾下的pdf文件總頁數呢?總不能一個個打開看頁碼數吧。

百度了以下,萬能的PYTHON果然有一個PYPDF2的庫,順利搞定

實現功能,對當前文件夾的PDF文件進行遍歷,并統計問價總頁數。

知識點1:如何對當前文件夾進行遍歷

知識點2:如何用PYPDF2統計文件頁數

一、安裝庫

pip install PyPDF2

二、代碼

? import os import time from PyPDF2 import PdfFileReaderdef folder_pdf_files(): #遍歷一個文件夾里的pdf文件file_list = []path = r"." for a, b, c in os.walk(path):#print(b)for filename in c:if filename[-4:].lower() == '.pdf':# print(filename)file_path = os.path.join(a, filename)file_list.append(file_path)print(f"在當前路徑下{len(file_list)} 有個pdf文件")return file_listdef get_num_pages(pdf):page_num = 0reader = PdfFileReader(pdf,strict=False)if reader.isEncrypted:return 0else:page_num = len(reader.pages)return page_numif __name__ == '__main__':nums = 0i = folder_pdf_files()for pdf in i:print(pdf)nums = nums +get_num_pages(pdf)print(f"該文件夾內pdf文件共有{nums}頁")time.sleep(10)?

三、生成exe

(一)安裝

pip install pyinstaller

(二)生成

pyinstaller -F x:\\xxx\xxx.py # x:\\xxx\xxx.py 是代碼存儲地址

最后,本著懶人推動科技進本的原則,對這段代碼生成了exe文件,供大家交流學習。

鏈接:鏈接:https://pan.baidu.com/s/1OMHeEDdeQz1G-K4NEd9JtQ?pwd=4444?
提取碼:4444?
?

四、主要改進內容

1.網上可以找到的代碼,使用的都是PyPDF2庫,

reader = PdfFileReader(pdf) num_page = reader.getNumPages()

reader.getNumPages()方法,但在閱讀PyPDF2庫文檔后,該方法雖然能夠正常使用,但是已經棄用。

getNumPages?(?)?→?int[資源]?

1.28.0 版后已棄用:改為使用len(reader.pages)

我使用了推薦的len(reader.pages)方法來統計頁數

2.在統計過程中,我發現我有一個文件夾名字為“pdf”,統計時出現異常

分析代碼? ?

if filename[-3:].lower() == 'pdf':

ilename[-3:].lower() == 'pdf'? 這句錯了

修改了一下

if filename[-4:].lower() == '.pdf':

雖然如果出現“.pdf”這樣的文件夾,程序仍然會報錯,但是我想正常人一般不會給文件夾起這樣的名字,所以也就不再修改了。

五、待完善

1.在實際使用中發現,需要統計的文件數量太大40w+,且硬盤不是固態硬盤,讀寫速度非常慢,統計時間太長,如果使用多進程、線程是否可以提高速度?

2.統計界面不友好,DOS界面,結果只保存10s,容易錯過,應當改寫消息彈窗,更為友好。

六、多進程

import os import time from tkinter import N from PyPDF2 import PdfFileReader #導入多進程模塊 from threading import Threadli = [0,0,0]def open_file(i,lock):with lock:with open("ip.txt" ,"a" ,encoding="utf-8") as f:f.write(f"{i}\n")def folder_pdf_files(): #遍歷一個文件夾里的pdf文件file_list = []path = r"." for a, b, c in os.walk(path):#print(b)for filename in c:if filename[-4:].lower() == '.pdf':# print(filename)file_path = os.path.join(a, filename)file_list.append(file_path)print(f"在當前路徑下{len(file_list)} 有個pdf文件")return file_listdef get_num_pages(pdf): #獲取pdf文件頁數page_num = 0reader = PdfFileReader(pdf,strict=False)if reader.isEncrypted:return 0else:page_num = len(reader.pages)return page_numdef pdfs_nums(pdfs,i): #獲取pdf文件list內總頁數num = 0global lifor pdf in pdfs:num += get_num_pages(pdf)if i%3 == 0:li[0] = numelif i%3 == 1:li[1] = numelse:li[2] = numprint(li)print(f"{i} 的頁數是 {num}")return numdef pr():time.sleep(6)print(li)if __name__ == '__main__':i = 0pdf1,pdf2,pdf3 = [],[],[] folder = folder_pdf_files()for pdf in folder:if i%3 == 0:pdf1.append(pdf)elif i%3 == 1:pdf2.append(pdf)else:pdf3.append(pdf)i += 1for i in range(3):if i == 0:t1 =Thread(target=pdfs_nums, args=(pdf1,i))t1.start()elif i == 1:t2 =Thread(target=pdfs_nums, args=(pdf2,i))t2.start()else:t3 =Thread(target=pdfs_nums, args=(pdf3,i))t3.start()t1.join()t2.join()t3.join()total = li[0] + li[1] + li[2]print(f"總頁數是 {total}")

這下尷尬了,用time.perf_counter()測試了下,多線程和非多線程,用時幾乎一致,沒有明顯提高速度,這又是為什么呢?

如果代碼對您的工作給予了幫助,節省了您的時間,還請老板打個賞,讓我再這炎炎夏日里能買杯蜜雪冰城喝喝。

總結

以上是生活随笔為你收集整理的统计当前文件夹下pdf文件的页码总数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。