python-常用程式碼
阿新 • • 發佈:2020-10-08
1、遍歷資料夾、子目錄
import os #提取檔案目錄,存成列表list_directory(列表有順序,字典無序) def get_directory(path,li=[]): li.append(path) """ 1、topdown=true從上往下遍歷,false從底層往上遍歷 2、dirs是walk遍歷出來的,還需要再遍歷一次。 3、files與dirs類似,也需要遍歷2遍。 4、root是目錄名絕對路徑,dirs是單個目錄名,files是單個檔名 """ for root, dirs, files in os.walk(path, topdown=True): for name in dirs: li.append(os.path.join(root, name)) #將指定目錄下的所有目錄都新增到列表li,dirs是個可迭代的包含目錄名 return li
2、遍歷資料夾下的檔案
import os for root, dirs, files in os.walk(path, topdown=True): for name in files: if name.endswith(".tif"): #判斷檔案型別 path_file = os.path.join(root, name) #root是檔名name對應的目錄 tif.get_tif(path_file) elif name.endswith(".pdf"): path_file = os.path.join(root, name) pdf.get_pdf(path_file) #變數組成列表 dic = [path, pdf.count, round(pdf.size, 2), pdf.page, tif.count, round(tif.size, 2),tif.page] return dic
3、獲取電腦桌面路徑
import winreg
#獲取桌面路徑
def get_desktop():
key = winreg.OpenKey(winreg.HKEY_CURRENT_USER,
r'Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders',)
return winreg.QueryValueEx(key, "Desktop")[0]
4、資料寫入excel
import xlwt # 將資料寫入excel def data_write(file_path, datas): #建立一個工作簿 f = xlwt.Workbook() #建立sheet1 sheet1 = f.add_sheet(u'sheet1', cell_overwrite_ok=True) #插入表頭 header = ['path','pdf_count','pdf_size','pdf_page','tif_count','tif_size','tif_page'] for k in range(len(header)): sheet1.write(0,k, header[k]) # 將資料寫入第 i 行,第 j 列 i = 1 for data in datas: #datas就是一個列表(行),裡面存的還是列表(列) for j in range(len(data)): sheet1.write(i, j, data[j]) #data[j]是資料內容 i = i + 1 #獲取桌面路徑 file_path=get_desktop() file_path=f'{file_path}/data.xls' #儲存excel檔案,需要帶上寫入的檔名稱 f.save(file_path) #f是上面存的工作簿物件 #開啟檔案 os.system(f"start {file_path}")
5、pdf檔案頁數的幾種方法
import pdfplumber
def get_pdf_pages(path):
f = pdfplumber.open(path)
return len((f.pages))
from PyPDF2 import PdfFileReader
def get_num_pages(file_path):
"""
獲取檔案總頁碼
:param file_path: 檔案路徑
:return:
"""
reader = PdfFileReader(file_path)
# 不解密可能會報錯:PyPDF2.utils.PdfReadError: File has not been decrypted
if reader.isEncrypted:
reader.decrypt('')
page_num = reader.getNumPages()
return page_num
from pdfrw import PdfReader
def get_pages(file_path):
x=PdfReader(path)
num_page0=len(x.pages)
return num_page0
6、判斷字串是否包含空格
import re #正則模組
#傳入字串,返回true或者false
def is_space(char):
"""判斷是否包含空格"""
if re.search(r"\s",char):
return True
else:
return False
7、獲取tif檔案頁數
from PIL import Image
# 獲取檔案累計頁數
def get_page(self,path):
img = Image.open(path)
self.page=self.page+img.n_frames
8、多程序多執行緒的使用
from concurrent.futures import ProcessPoolExecutor,as_completed
import multiprocessing
if __name__ == '__main__':
#防止windows多程序迴圈呼叫
multiprocessing.freeze_support()
# future.map函式,也是非同步處理的,map函式會根據li列表的順序返回對應值。
# ProcessPoolExecutor() 不寫引數代表根據電腦最大cpu核數取值,建立程序池
with ProcessPoolExecutor(max_workers=7) as executor:
for prime in executor.map(get_file, li): #遍歷li列表,將遍歷的值傳給函式get_file執行
l_queue.append(prime)
#最新版本,使用as_completed處理非同步
with ProcessPoolExecutor(max_workers=7) as executor:
futures = [executor.submit(get_file, item) for item in li] #根據列表li提交任務
for future in as_completed(futures): #當get_file返回時,再遍歷取值,非同步的
l_queue.append(future.result())
9、獲取py檔案路徑
file_name=os.path.dirname(__file__)
10、彈窗獲取使用者選擇的路徑
import tkinter as tk
from tkinter import filedialog
root = tk.Tk()
root.withdraw()
file_path = filedialog.askdirectory() #使用者選擇的路徑
11、打包應用程式
pyinstaller -F 打包成一個應用程式(不寫打包成一個目錄) -i 圖示名稱 start.py(打包的py主檔案)
#終端切換到目錄執行
D:\網際網路專案\vba\datatools-副本>pyinstaller start.py
#指定-F引數容易失敗,多程序要加multiprocessing.freeze_support()
12、類的寫法
#基類
class Base:
# 獲取檔案大小、數量
def __init__(self):
self.count = 0
self.size = 0
self.page = 0
# 獲取檔案累計大小
def get_size(self,path):
fsize = os.path.getsize(path)
fsize = fsize / float(1024 * 1024)
self.size=fsize+self.size
#print(f'檔案大小是{fsize}')
# 獲取檔案累計數量
def get_count(self):
self.count=self.count + 1
#子類
#tif類
class tif_info(Base):
def __init__(self):
super().__init__() #呼叫父類的init方法
# 獲取檔案累計頁數
def get_page(self,path):
img = Image.open(path)
self.page=self.page+img.n_frames
# 封裝呼叫3個類方法
def get_tif(self,path):
self.get_count()
self.get_size(path)
self.get_page(path)