文件和邮件FF

楼主
我是社区第713489位番薯,欢迎点我头像关注我哦~

#!/usr/bin/env python

# -*- coding: UTF-8 -*-

# 代码可以实现对 SQLite3的数据库查询,可更改数据库名,可修改查询

# 返回结果,如果是文件路径,可以单击打开

import sys, os, re, datetime, time, traceback

import win32timezone

sys.path.append(r"\\sienfs01\12inch_Fab\Pypak\PAK")

from tkinter import *

import sqlite3

import pyautogui as auto

import ctypes.wintypes

import win32com.client

from pptx import Presentation

import openpyxl

import base64

from PIL import Image, ImageTk

from io import BytesIO

 

 

start_r = 0                 # 起始行

p_row=8                     # 每页显示的行数

 

DB_FILE = r'H:\FILE_00X.DB' # 默认的数据库文件

disk_Dir=r"H:\\"

 

 

 

class Application(Frame):

    '''查询数据库 SQLite3, 并且打开文件'''

    def __init__(self, master=None):

        super().__init__(master)

        self.master = master

        self.pack()

        self.newWidget()

    # 设计查询主界面

    def newWidget(self):

        global v

        #self.config(bg='#434345')

        Button(self, text="数据库文件:", font=('黑体', 12)).grid(row=0,column=0, sticky=W )

        self.text_db=Text(self, width=40, height=1, bg='lightgray', font=('黑体', 16))

        self.text_db.grid(row=1, column=0)

        self.text_db.insert(1.0,DB_FILE)

 

        Button(self, text="SQL代码区:", font=('黑体', 12)).grid(row=2,column=0, sticky=W)

 

        self.text_in=Text(self, width=50, height=15, bg='wheat', font=('黑体', 16))

        self.text_in.tag_config('red',foreground='red')

        self.text_in.tag_config('blue',foreground='blue')

        self.text_in.insert(END,

    """SELECT ID,FILENAME,DT,TP,PATH,TM

    FROM FILES

    WHERE 1=1

        -- 查询文件名,或发件人 --""")

        self.text_in.insert(END,"\n    AND FILENAME LIKE '%%%'",'blue')

        self.text_in.insert(END,"""

    AND TP LIKE '%%%'

    AND PATH LIKE '%%%'

        -- 查询文件内容,关键字左右都要有% --""")

        self.text_in.insert(END,"\n    AND CONTENT LIKE '%%%%%'",'blue')

        self.text_in.insert(END,"\n    ORDER BY DT DESC")

 

        self.text_in.insert(END,

        """\n    --如果你熟悉SQL语句,

    --可以把上面的全部删除,自己按要求写 :)

        """,'red')

       

        decoded_image_data = base64.b64decode(base64_string)

        sien = ImageTk.PhotoImage(Image.open(BytesIO(decoded_image_data)))

 

        self.text_in.grid(row=3, rowspan=6, column=0)

        # 邮件保存 ##########################################################

        self.btn01=Button(self, text="邮件保存", font=('黑体', 16), command=self.mail_write)

        self.btn01.grid(row=3, column=1, sticky=N )

 

        self.btn02=Button(self, text="查询", font=('黑体', 20), bg='#00aff0', command=self.query)

        self.btn02.grid(row=0, column=1, sticky=W )

        # 本地文件 ##########################################################

        self.btn03=Button(self, text="文件更新", font=('黑体', 16), command=self.disk_check)

        self.btn03.grid(row=4, column=1, rowspan=2, sticky=N )

 

        self.label03=Label(self, text="腹有诗书气自华,云鹤孤鸷任天涯...", font=('黑体', 12))

        self.label03.grid(row=11, column=0,  sticky=SE )

        bt2=Label(self,image=sien)

        bt2.image=sien

        bt2.grid(row=11, column=1)

 

        v = IntVar()

 

# 根据单选按钮的 value 值来选择相应的选项

        v.set(0)

        # 使用 variable 参数来关联 IntVar() 的变量 v

        rd1 = Radiobutton(self, text="收件箱", fg='blue',font=('微软雅黑','12','bold'),variable=v, value=0)

        rd2 = Radiobutton(self, text="所有邮箱", variable=v, value=1)

 

        rd1.grid(row=6, column=1,  sticky=S)

        rd2.grid(row=7, column=1,  sticky=N)

 

 

    def query(self):

        query = self.text_in.get(1.0, END).replace('FROM', ',CONTENT FROM')

        print(query)

        DB = self.text_db.get(1.0, END)

        print(DB)

        # 从Text组件获取的文本含有特殊字符,记得用 strip()去除掉

        conn = sqlite3.connect(DB.strip())

        cursor = conn.cursor()

        cursor.execute(query)

        rows = cursor.fetchall()

        # 先要将 SQLite3 返回结果改为 List,默认是元组

        rows = [list(row) for row in rows]

        # 获取返回数据的字段名

        cols = [description[0] for description in cursor.description]

        conn.close()

 

        # 将CONTENT的结果,匹配到 sheetname或PPT的页码数

        # 并且将结果覆盖掉 CONTENT的原始数据

        # 先要将 SQLite3 返回结果改为 List,默认是元组

        chars1 = re.findall('(?<=CONTENT LIKE \'%).*(?=\')', query)

        chars1 = chars1[0].strip('%')

        chars1 = chars1.replace('%', '.*')

        if chars1 == '': chars1 = '字符为空'

        print(chars1)

        for i2, descr in enumerate(cursor.description):

            #print(descr[0])

            if descr[0].upper() == 'CONTENT': content_i = i2

            if descr[0].upper() == 'TP': TP_i = i2

 

        print(content_i, TP_i)

        for i1, row in enumerate(rows):

            #print(rows[i1][i2])

            if row[TP_i] == 'XLSX':

                final = rows[i1][content_i].replace('SN:', 'ÿ').replace('\n', '')

                chars_result = re.findall('ÿ[^ÿ:]*:(?=[^ÿ]*{})'.format(chars1), final, 2)

                pos_name = ', '.join(chars_result)

                #print(rows[i1][content_i])

                rows[i1][content_i] = pos_name.replace('ÿ', 'SN:')

            if row[TP_i] == 'PPTX':

                final = rows[i1][content_i].replace('PG:', 'ÿ').replace('\n', '')

                chars_result = re.findall('ÿ[^ÿ:]*:(?=[^ÿ]*{})'.format(chars1), final, 2)

                pos_name = ', '.join(chars_result)

                #print(rows[i1][content_i])

                rows[i1][content_i] = pos_name.replace('ÿ', 'PG:')

            if row[TP_i] == 'MSG':

                rows[i1][content_i] = 'NA'

 

 

        global start_r

        start_r = 0

        self.show_result(cols, rows)

 

    def open_F(self, event):

        print('ok')

        bg = event.widget.cget('bg')

        file = event.widget.cget('text').replace('\\\\','\\')

        if bg == 'white':

           os.startfile(file)

 

    def show_result(self, cols, rows):

        result_window = Toplevel()

        result_window.title('查询结果')

        result_window.geometry('1400x500+200+200')

        start_r = 0

        #result_window.attributes('-topmost', True)

 

        # 局部函数, 销毁所有的 Label, 重写下一批, 背景色为 gold的标题行不销毁 ##########################

        def dest(rows, fx):

            global start_r

            children = result_window.winfo_children()

            start_r += fx*p_row

            rows_all = len(rows)

            if start_r >= rows_all: start_r = 0

            if start_r < 0: start_r = int(rows_all/p_row-0.01)*p_row

            LB['text'] = '返回数:'+ str(start_r) + ' / ' + str((len(rows)))

            for ch in children:

                if isinstance(ch, Label) and ch.cget('bg') != 'gold':

                   ch.destroy()

            write_some(rows, fx)

 

        # 局部函数, 每次写固定行数的返回结果, 到尾巴了从头开始 ##########################

        def write_some(rows, fx):

            global start_r

            rows_all = len(rows)

            for j, row in enumerate(rows[start_r:start_r+p_row if start_r+p_row

                for i, cell in enumerate(row):

                    lb = Label(result_window, text=cell, anchor=W, relief=RIDGE,

                                         width=text_wd[i], height=2, wraplength=text_wd[i]*7)

                    lb.grid(row=j+2, column=i)

                    if i == 4:

                       lb.config(bg='white', fg='blue')

            # 绑定事件, 判断是否可以打开文件

            lb.bind_class('Label', '', self.open_F)

 

 

        # 确认字符数量,以便设置Label宽度,字符最多为50个,<50则取所有行的最大值

        text_wd=[5 for i in range(len(cols))]

        for j, row in enumerate(rows):

            for i, cell in enumerate(row):

                if len(str(cell).strip()) > text_wd[i]:

                   text_wd[i] = len(str(cell).strip()) if len(str(cell).strip()) < 70 else 70

        print(text_wd)

 

        # 显示标题行,行高2个字符,wraplength的像素值 = 字符数 * 7

        for i, col in enumerate(cols):

            Label(result_window, text=col, anchor=W, relief=RIDGE,

                                 width=text_wd[i], bg='gold', height=2, wraplength=text_wd[i]*7).grid(row=1, column=i)

 

        # 显示结果行

        write_some(rows, 1)

 

        # 调用销毁和重写下一批的功能, btn02 是销毁退出 Toplevel

        btn01 = Button(result_window, text='下一页', font=('黑体', 15), command=lambda:dest(rows, 1))

        btn01.grid(row=0, column=1)

        btn03 = Button(result_window, text='上', font=('黑体', 15), command=lambda:dest(rows, -1))

        btn03.grid(row=0, column=0)

        btn02 = Button(result_window, text='退出关闭', font=('黑体', 15), command=lambda:result_window.destroy())

        btn02.grid(row=0, column=2, padx=2)

        LB = Label(result_window, text='返回数:'+str(len(rows)), bg='gold', font=('黑体', 15))

        LB.grid(row=0, column=4, sticky=W )

 

    def mail_write(self):

        # 初始全局变量,定义数据库 ##########################################################

        outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")

        cnt = 0

        cnt_ok=0

        rep0 = 0

        chk_Dir = r"H:\MAIL"

        all_path = chk_Dir

        file_cnt=0

        global v

 

        #检查文件夹是否存在,否则创建

        if os.path.exists(chk_Dir) is False:

            os.mkdir(chk_Dir)

            os.mkdir(chk_Dir+r'\send')

        else:

            print('文件夹已经存在......很OK')

 

        wd = auto.size().width

        geo_str='700x500+600+200'

        if wd > 2000: geo_str='900x650+600+200'

        result_window = Toplevel()

        result_window.title('运行中......看到结果提示后,请关闭此窗口...')

        result_window.geometry(geo_str)

        frame = Frame(result_window)

        frame.pack(side='left', fill='both', expand=True)

        text = Text(frame, width=40, font=('黑体', 16), fg='#00fd35', bg='#434345')

        text.pack(side='left', fill='both', expand=True)

 

        scrollbar1 = Scrollbar(frame, command=text.yview)

        scrollbar1.pack(side='left', fill='y')

 

        text.config(yscrollcommand=scrollbar1.set)

 

        # 获取所有根级文件夹

 

        root_folders = outlook.Folders

 

        disk_set = set()

        for root, dirs, files in os.walk(chk_Dir,topdown=False):

            if root.upper().find("Welink_Files")>-1:

                continue

            for file in files:

                f1 = os.path.join(root, file)

                disk_set.add(f1)

 

 

 

        def folder_all(folder0,item0):

            for f in folder0.Folders:

                if f.Folders.Count>0:

                    folder_all(f,item0)

                item0.append(f.Items)

 

        file_cnt = 0

        vv = v.get()

        # 遍历每一个根级文件夹及其子文件夹

        for folder in root_folders:

            for sub_folder in folder.Folders:

                item0=[]

                #if cnt_ok >2: exit()

                text.insert(END, folder.Name+'--'+sub_folder.Name+ '\n')

                text.update()

                if (folder.Name.find('.com') > -1 and sub_folder.Name in ('202203','收件箱','已发送邮件')) if vv==0 else sub_folder.Name.find('删除')==-1:

                    item0.append(sub_folder.Items)

                    if sub_folder.Folders.Count>0:

                        folder_all(sub_folder,item0)

                        print('xxxxxxxxxxxxxxxxxxxxxxxx',len(item0))

                    for mm in item0:

                        try: mm.Sort("[ReceivedTime]",True)

                        except: pass

                        rep0 = 0

                        #Michael.Liu@sienidm.com

                        for mail in mm:

                            #break

                            cnt+=1

 

                            try:

                                sender=mail.SenderName

                            except:

                                continue

 

                            save_folder_path=all_path

                            if sub_folder.Name in ('202203','已发送邮件','已发送'):

                                sender=''

                                save_folder_path=all_path+r'\send'

##                            if sub_folder.Name=='收件箱':

##                                save_folder_path=all_path

 

                            #sender=''

                            # 获取邮件主题,以此做文件名,故需要去除文件名的非法字符

                            mail_subject = re.sub(r'[<>/\|:"*?]','_',mail.Subject.replace(' ',''))

                            # 获取邮件创建时间

                            mail_date = mail.CreationTime.strftime("%Y-%m-%d %H-%M-%S")

                            # 转换为时间戳整数

                            date2=time.mktime(mail.CreationTime.timetuple())

 

                            # 构造保存文件路径

                            save_file_path = os.path.join(save_folder_path,

                                                    f'{sender}_{mail_subject}={mail_date}.msg')

                            file = f'{sender}_{mail_subject}={mail_date}.msg'

                            f1 = save_file_path

                            #print(dir(mail))

                            if save_file_path in disk_set:

                                if cnt%10 == 0:

                                    text.insert(END, sub_folder.Name+'.....'+str(cnt)+'......Existsed........'+'\n')

                                    text.see(END)

                                    text.update()

                                rep0 += 1

##                                if rep0 > 20:break

                                continue

 

 

                            #print(sub_folder.Name+'.....'+str(cnt)+'::'+save_file_path)

                            text.insert(END, sub_folder.Name+'.....'+str(cnt)+'::'+save_file_path+'\n')

                            text.see(END)

                            text.update()

                            # 将邮件保存到指定路径

                            try:

                                mail.SaveAs(save_file_path)

                                os.utime(save_file_path,(date2,date2))

                                cnt_ok+=1

                            except:

                                print(Exception)

            #print(str(cnt_ok)+'   封邮件已保存')

            text.insert(END, str(cnt_ok)+'   封邮件已保存, end......'+'\n')

            text.see(END)

            text.update()

 

        self.extra(text)

 

    def extra(self, text):

        file_cnt=0

        CNT0 = 0

        file_size = 0

 

        chk_Dir=r"H:\MAIL"

        start_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))

        outlook = win32com.client.Dispatch("Outlook.Application")

 

        file_no=['START','START','\n']

 

        time.sleep(0.2)

        text.insert(END, '\n\n\n\n开始写数据库................................\n\n'+'\n')

        text.see(END)

        text.update()

 

 

        #if DB_FILE + chk_Dir not in ('D:\FILE_03.DBH:\MAIL', 'D:\FILE_MFG.DBS:\02_MFG'): exit()

 

 

        ##def extract_text_from_msg(filepath):

        ##    with open(filepath, 'rb') as f:

        ##        msg = Message(f)

        ##        msg_sender = msg.sender

        ##        msg_subject = msg.subject

        ##        msg_txt = ""

        ##        for chunk in msg.body:

        ##            if isinstance(chunk, bytes):

        ##                msg_txt += chunk.decode('gb18030', errors='ignore')

        ##            else:

        ##                msg_txt += str(chunk)

        ##        return msg_sender, msg_subject, msg_txt

 

        # 定义数据库表结构和连接

        conn = sqlite3.connect(DB_FILE,check_same_thread=False)

        c = conn.cursor()

        c.execute('''

            CREATE TABLE IF NOT EXISTS FILES (

                id INTEGER PRIMARY KEY AUTOINCREMENT,

                filename TEXT,

                dt TEXT,

                TP TEXT,

                path TEXT,

                tm TEXT,

                SIZE INTEGER,

                content TEXT

            )

        ''')

 

 

        # 读取数据库中的 MSG 文件,生产集合,以便判断,如果已经存在就不上传了

        c.execute("SELECT PATH FROM FILES WHERE 1=1 ")

        results = c.fetchall()

        hist_set = set([result[0] for result in results])

        disk_set = set()

 

        for root, dirs, files in os.walk(chk_Dir,topdown=False):

            if root.upper().find("Welink_Files")>-1:

                continue

            for file in files:

                f1 = os.path.join(root, file)

                disk_set.add(f1)

        diff_set=disk_set-hist_set

 

        for f1 in diff_set:

            file = os.path.basename(f1)

            file_size += os.path.getsize(f1)

            #f1 = f1.replace('\\._','\\')

            ext = os.path.splitext(file)[-1]

            ext = ext.upper()

            CNT0 += 1

 

 

            # 解析   MSG  文件内容######################################################

            content=''

            if file.find('~$') == -1 and ext == '.MSG' and (0 if f1 in hist_set else 1):

                DT_TM= time.strftime("%Y-%m-%d_%H:%M:%S",time.localtime(os.path.getmtime(f1)))

                tm1=time.time()

                tp='MSG'

                file_cnt+=1

                #print(str(file_cnt)+"...发现修改文件:", f1)

                text.insert(END, str(file_cnt)+"...发现修改文件:"+f1+'\n')

                text.see(END)

                text.update()

            # 解析 MSG 文件内容

                try:

                    msg = outlook.CreateItemFromTemplate(f1)

                    content = msg.Body

                    if content == '': content = '正文是空'

                except:

                    err=traceback.format_exc()

                    print(Exception)

                    file_no.append(f1+'\n'+err+'\n')

                    pass

                if content == '': continue

                # 插入记录到数据库

                #print(content.replace('\n\r', ''))

                tm2=time.time()

                tm3=str(round(tm2-tm1,3))

                size=len(content)

                c.execute('INSERT INTO files (dt,tp,filename, path, tm,size,content) VALUES (?,? ,?,?, ?,?, ?)',

                            (DT_TM,tp,file, f1,tm3,size, content))

                conn.commit()

                #print('ok......')

 

 

        end_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))

 

        c.close()

        conn.close()

        #print('end.....................................')

        #print('硬盘邮件总大小......' + str(int(file_size/1000/1000)), 'M')

        text.insert(END, '\n\n\n\n\nend.....................................'+'\n')

        text.insert(END, f'end........上传了....{file_cnt}  封邮件.........'+'\n')

        text.insert(END, '硬盘邮件总大小......' + str(int(file_size/1000/1000))+ 'M'+'\n')

        text.see(END)

        text.update()

 

    def disk_check(self):

        tm00 = time.time()

        file_cnt = 0

        file_all = 0

 

 

        start_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))

 

        file_no=['START','START','\n']

 

        wd = auto.size().width

        geo_str='700x500+600+200'

        if wd > 2000: geo_str='900x650+600+200'

        result_window = Toplevel()

        result_window.title('运行中......看到结果提示后,请关闭此窗口...')

        result_window.geometry(geo_str)

        frame = Frame(result_window)

        frame.pack(side='left', fill='both', expand=True)

        text = Text(frame, width=40, font=('黑体', 16), fg='#00fd35', bg='#434345')

        text.pack(side='left', fill='both', expand=True)

 

        scrollbar1 = Scrollbar(frame, command=text.yview)

        scrollbar1.pack(side='left', fill='y')

 

        text.config(yscrollcommand=scrollbar1.set)

 

 

        # 定义数据库表结构和连接

        conn = sqlite3.connect(DB_FILE,check_same_thread=False)

        c = conn.cursor()

        c.execute('''

            CREATE TABLE IF NOT EXISTS FILES (

                id INTEGER PRIMARY KEY AUTOINCREMENT,

                filename TEXT,

                dt TEXT,

                TP TEXT,

                path TEXT,

                tm TEXT,

                SIZE INTEGER,

                content TEXT

            )

        ''')

 

        c.execute('SELECT PATH FROM FILES')

        results = c.fetchall()

        file_hist = set(list(r[0] for r in results))

        file_new = set()

 

 

 

        for root, dirs, files in os.walk(disk_Dir,topdown=False):

            if root.upper().find("Welink_Files")>-1:

                continue

 

            for file in files:

                f1 = os.path.join(root, file)

 

                #f1 = f1.replace('\\._','\\')

                ext = os.path.splitext(file)[-1]

                ext = ext.upper()

                #print(f1,ext)

 

 

                # 解析   XLSX  文件内容######################################################

                content=''

                if file.find('~$') == -1 and ext == '.XLSX':

                    size=int(os.path.getsize(f1)/1000/1000)

                    #ipdb.set_trace()

                    if size > 3:

                        #file_no.append(f1+'\n文件过大 '+str(size)+' M,跳过......\n')

                        text.insert(END, f1+'\n文件过大 '+str(size)+' M,跳过......\n'+'\n')

                        text.see(END)

                        text.update()

                        continue

                    file_all += 1

                    if f1 in file_hist:

                        #print(root + '\nExist..........' + str(file_all))

                        text.insert(END, root + '\nExist..........' + str(file_all)+'\n')

                        text.see(END)

                        text.update()

                        file_new.add(f1)

                        continue

 

                    DT_TM= time.strftime("%Y-%m-%d_%H:%M:%S",time.localtime(os.path.getmtime(f1)))

                    tm1=time.time()

                    tp='XLSX'

                    file_cnt+=1

                    #print(str(file_cnt)+"...发现修改文件:", f1)

                    text.insert(END, str(file_cnt)+"...发现修改文件:"+f1+'\n')

                    text.see(END)

                    text.update()

                    # 解析xlxs文件内容

 

 

                    # 打开Excel文件

                    try:

                        workbook = openpyxl.load_workbook(r'{}'.format(f1))

                        file_new.add(f1)

                    except:

                        time.sleep(3)

                        try:

                            workbook = openpyxl.load_workbook(r'{}'.format(f1))

                            file_new.add(f1)

                        except:

                            #print(Exception)

                            text.insert(END, str(Exception)+'\n')

                            text.see(END)

                            text.update()

                            err=traceback.format_exc()

                            file_no.append(f1+'\n'+err+'\n')

                            c.execute('INSERT INTO files (dt,tp,filename, path,tm,size, content) VALUES (? ,?,?,?, ?,?, ?)',

                                (DT_TM,tp,file, f1,0,0, '打开出错'))

                            conn.commit()

                            continue

 

 

                    # 获取所有非空白的工作表名

                    try:

                        sheet_names = [name for name in workbook.sheetnames if workbook[name].max_column > 0 and workbook[name].max_row > 0]

                    except:

                        text.insert(END, str(Exception)+'\n')

                        text.see(END)

                        text.update()

                        err=traceback.format_exc()

                        file_no.append(f1+'\n'+err+'\n')

                        continue

 

                    # 遍历每个工作表

                    for sheet_name in sheet_names:

                        # 获取工作表对象

                        sheet = workbook[sheet_name]

                        # 获取最大行数和列数

                        max_row = sheet.max_row

                        max_column = sheet.max_column

                        # 只取前100行的内容

                        if max_row > 30:

                            max_row = 30

                        if max_column > 20:

                            max_column = 20

 

                        # 遍历每行和每列,获取单元格内容

                        # 每个sheet把表名加在前面 SN:sheetname:

                        content = content + ' SN:{}:'.format(sheet_name)

                        for row in range(1, max_row+1):

                            for column in range(1, max_column+1):

                                # 获取单元格内容

                                value=sheet.cell(row=row, column=column).value

                                if value is None:

                                    continue

                                if str(value).find('=')>-1:

                                    continue

                                if str(value).isnumeric():

                                    continue

                                content = content + ',' + str(value)

 

                    # 插入记录到数据库

                    #print(content)

                    tm2=time.time()

                    tm3=str(round(tm2-tm1,3))

                    size=len(content)

                    c.execute('INSERT INTO files (dt,tp,filename, path,tm,size, content) VALUES (? ,?,?,?, ?,?, ?)',

                                (DT_TM,tp,file, f1,tm3,size, content))

                    conn.commit()

 

                # 解析   PPTX  文件内容######################################################

                content=''

                if file.find('~$') == -1 and ext == '.PPTX':

                    file_all += 1

                    if f1 in file_hist:

                        #print(root + '\nExist..........' + str(file_all))

                        text.insert(END, root + '\nExist..........' + str(file_all)+'\n')

                        text.see(END)

                        text.update()

                        file_new.add(f1)

                        continue

                    DT_TM= time.strftime("%Y-%m-%d_%H:%M:%S",time.localtime(os.path.getmtime(f1)))

                    tm1=time.time()

                    tp='PPTX'

                    file_cnt+=1

                    #print(str(file_cnt)+"...发现修改文件:", f1)

                    text.insert(END, str(file_cnt)+"...发现修改文件:"+f1+'\n')

                    text.see(END)

                    text.update()

                # 解析pptx文件内容

                    try:

                        prs = Presentation(f1)

                        file_new.add(f1)

                    except:

                        time.sleep(3)

                        try:

                            prs = Presentation(f1)

                            file_new.add(f1)

                        except:

                            text.insert(END, str(Exception)+'\n')

                            text.see(END)

                            text.update()

                            err=traceback.format_exc()

                            file_no.append(f1+'\n'+err+'\n')

                            c.execute('INSERT INTO files (dt,tp,filename, path,tm,size, content) VALUES (? ,?,?,?, ?,?, ?)',

                                (DT_TM,tp,file, f1,0,0, '打开出错'))

                            conn.commit()

                            continue

 

                    for pg, slide in enumerate(prs.slides):

                        content += '\nPG:{}:'.format(str(pg))

                        content += ','.join(paragraph.text for shape in slide.shapes if shape.has_text_frame

                                        for paragraph in shape.text_frame.paragraphs)

 

 

                    # 插入记录到数据库

                    #print(content)

                    tm2=time.time()

                    tm3=str(round(tm2-tm1,3))

                    size=len(content)

                    c.execute('INSERT INTO files (dt,tp,filename, path, tm,size,content) VALUES (?,? ,?,?, ?,?, ?)',

                                (DT_TM,tp,file, f1,tm3,size, content))

                    conn.commit()

 

        end_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))

 

 

        conn.close()

 

        text.insert(END, '\n\n\n\n\nend.....................................'+'\n')

        text.insert(END, str(time.time()-tm00)+'\n')

        text.insert(END, f'共完成 ...{file_cnt}...个文件,存到数据库,请关闭此窗口'+'\n')

        text.see(END)

        text.update()

 

 

 

 

if __name__ == '__main__':

    user = os.getlogin()

    if user not in ['刘晓勇','Q01077','李艳','Q01178','Doris','Q01177','成航','Q02149','Lita','Q03745',

                    '文豪','Q01772','天慧','Q00931','李庆','Q03938','光瑜','Q00564','倩茹','Q03959','詹恒','Q01034',

                    '雪武','Q01036','徐彤','Q00295','王雪','Q02101','亚伟','Q03558','大英','Q03723','许海玲','Q00218',

                    '吴诤','Q03909','孟令成','Q00836','陈晋','Q02284','宽结','Q03633','修远','Q00017','Jacky','Q00754',

                    '满仓','Q03244','何其浩','Q01169','阿彪','Q01069','新俊','Q03520','孟凡勇','Q01695',

                    '李敏','Q00988','张幸娥','Q00260','朱玮','Q04124','于宏斌','Q03469','王介伟','Q00122',

                    '刘媛','Q02110','周琴','Q01986','王欣','Q00034','胡凯','Q00642']:

        auto.confirm('您还没有授权测试,请联系他!!!')

        sys.exit()

    wd = auto.size().width

    geo_str='650x500+600+200'

    if wd > 2000: geo_str='850x600+600+200'

 

    root = Tk()

    root.title('文件_邮件管理_查询界面')

    root.geometry(geo_str)

    app = Application(master=root)

    root.mainloop()

 

分享扩散:

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

返回顶部 返回列表