1. 程式人生 > 實用技巧 >python-常用程式碼

python-常用程式碼

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)