Python自动化办公和鼠标键盘模拟

文件树

import tkinter
import os
from tkinter import ttk

win = tkinter.Tk()
win.title("fang")
win.geometry("600x400")

from treeWindows import TreeWindows
from infoWindows import InfoWindows

path=r"E:\pycharm project/tki·nter2"
infoWin = InfoWindows(win)
treeWin = TreeWindows(win,path,infoWin)
#进入消息循环
win.mainloop()

处理文件(CSV,PDF,word)

import importlib
importlib.reload(sys)
from pdfminer.pdfparser import PDFParser,PDFDocument
from pdfminer.pdfinterp import PDFResourceManager,PDFPageInterpreter
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import LTTextBoxHorizontal,LAParams
from pdfminer.pdfinterp import PDFTextExtractionNotAllowed

import win32com
import win32com.client

class DealFile(object):

    def readCsv(self,path):
        infoList = []  # 创建一个列表
        with open(path, "r") as f:
            allFileInfo = csv.reader(f)
            # print(allFileInfo)
            for row in allFileInfo:
                # print(row)
                infoList.append(row)
        return infoList

    def writeCsv(self,path, data):
        with open(path, "w") as f:
            writer = csv.writer(f)  # 以csv格式创建
            for rowData in data:
                writer.writerow(rowData)

    def readPDF(self,path, callback,toPath):
        # 以二进制形式打开pdf文件
        f = open(path, "rb")
        # 创建一个pdf文档分析器
        parser = PDFParser(f)
        # 创建pdf文档
        pdfFile = PDFDocument()
        # 链接分析器与文档对象
        parser.set_document(pdfFile)
        pdfFile.set_parser(parser)
        # 提供初始化密码
        pdfFile.initialize('')
        # 检测文档是否提供txt转换
        if not pdfFile.is_extractable:
            raise PDFTextExtractionNotAllowed
        else:
            # 解析数据
            # 数据管理器
            manager = PDFResourceManager()
            # 创建一个PDF设备对象
            laparam = LAParams()
            device = PDFPageAggregator(manager, laparams=laparam)
            # 解释器对象
            interpreter = PDFPageInterpreter(manager, device)
            # 开始循环处理,每次处理一页
            for page in pdfFile.get_pages():
                interpreter.process_page(page)
                layout = device.get_result()
                for x in layout:
                    if (isinstance(x, LTTextBoxHorizontal)):
                        if toPath == "":
                            #处理每行数据
                            str = x.get_text()
                            if callback != None:
                                #处理数据函数,在调用文件中定义,回调函数
                                callback(str)
                            else:
                                print(str)
                        else:
                            #写入文件
                            with open(toPath, "a") as f:
                                str = x.get_text()
                                #print(str)
                                f.write(str + "\n")

    def readWordfile(path):
        # 调用系统word功能,可以处理doc和docx两种文件
        mw = win32com.client.Dispatch("Word.Application")
        # 打开文件
        doc = mw.Documents.Open(path)
        for paragraph in doc.Paragraphs:
            line = paragraph.Range.Text
            print(line)
        doc.Close()
        mw.Quit()
        return line
    #读取world文件写入其他文件:
    def readWordfileToOtherfile(path, topath):
        # 调用系统word功能,可以处理doc和docx两种文件
        mw = win32com.client.Dispatch("Word.Application")
        # 打开文件
        doc = mw.Documents.Open(path)
        # 将word的数据保存到另一个文件
        doc.SaveAs(topath, 2)  # 2表示为txt文件
        doc.Close()
        mw.Quit()
        

读取xlsx文件

from openpyxl.reader.excel import load_workbook

def readXlsxFile(path):
    #打开文件
    file = load_workbook(filename = path)
    #所有表格的名称
    #print(file.get_sheet_names())
    sheets = file.get_sheet_names()

    #拿出一个表格
    sheet = file.get_sheet_by_name(sheets[1])
    #最大行数
    #print(sheet.max_row)
    #最大列数
    #print(sheet.max_column)
    #表名
    #print(sheet.title)

    for lineNumber in range(1,sheet.max_row+1):
        #print(lineNumber)
        #定义一个列表
        lineList = []
        for columnNumber in range(1,sheet.max_column+1):
            #拿数据
            value = sheet.cell(row=lineNumber,column=columnNumber).value
            lineList.append(value)
        print(lineList)

#不能处理xls文件
path = r"E:\pycharm project\自动化办公和鼠标键盘模拟\p\1.xlsx"
readXlsxFile(path)

  • 返回xlsx整体文件
from openpyxl.reader.excel import load_workbook

def readXlsxFile(path):
    #打开文件
    dic = {}
    file = load_workbook(filename = path)
    sheets = file.get_sheet_names()
    for sheetName in sheets:
        sheet = file.get_sheet_by_name(sheetName)
        #一张表所有的数据
        sheetInfo = []
        for lineNumber in range(1,sheet.max_row+1):
            lineList = []
            for columnNumber in range(1,sheet.max_column+1):
                value = sheet.cell(row=lineNumber, column=columnNumber).value
                lineList.append(value)
                sheetInfo.append(lineList)

        #将一张表里的数据存到字典
        dic[sheetName] = sheetInfo
    return dic

#不能处理xls文件
path = r"E:\pycharm project\自动化办公和鼠标键盘模拟\p\1.xlsx"
dic = readXlsxFile(path)
print(dic)

tree_windows(窗口树)

import tkinter
from tkinter import ttk
import os

class TreeWindows(tkinter.Frame):       #新建一个类
    def __init__(self,master,path,otherWin):
        frame = tkinter.Frame(master)
        frame.grid(row=0,column=0)      #frame窗口的位置

        self.otherWin = otherWin

        self.tree = ttk.Treeview(frame)     #在frame窗口中加入树状结构
        self.tree.pack(side=tkinter.LEFT,fill=tkinter.Y)

        tempPath = self.getLastPath(path)
        print(tempPath)
        root = self.tree.insert("","end",text=tempPath,open=True,values=(path))
        self.loadTree(root,path)

        #滚动条
        self.sy = tkinter.Scrollbar(frame)      #创建滚动条
        self.sy.pack(side=tkinter.RIGHT,fill=tkinter.Y)     #设置滚动条的位置
        #绑定
        self.sy.config(command=self.tree.yview)
        self.tree.config(yscrollcommand=self.sy.set)

        #绑定事件
        self.tree.bind("<<TreeviewSelect>>",self.func)
    def func(self,event):
        self.v = event.widget.selection()
        for sv in self.v:
            file = self.tree.item(sv)["text"]
            self.otherWin.ev.set(file)
            apath = self.tree.item(sv)["values"]
            print(apath)
            lastPath = self.getLastPath(apath)
            if not os.path.isdir(lastPath):
                f = open(apath,"r")
                allFileInfo = str(f.read())
                self.otherWin.tv.insert(tkinter.INSERT,allFileInfo)

    # 将目录按级插入树中
    def loadTree(self,parent,parentpath):
        for fileName in os.listdir(parentpath):
            absPath = os.path.join(parentpath,fileName)
            #插入树枝
            tree1 = self.tree.insert(parent,"end",text=self.getLastPath(absPath),values=(absPath))
            #判断是否是目录
            if os.path.isdir(absPath):
                self.loadTree(tree1,absPath)

    #获取绝对路径的最后一个
    def getLastPath(self,path):
        pathList = os.path.split(path)
        return pathList[-1]

键盘模拟

import win32con
import win32api
import time

'''
win32api.keybd_event(91,0,0,0)
time.sleep(1)
win32api.keybd_event(91,0,win32con.KEYEVENTF_KEYUP)
'''

while True:
    win32api.keybd_event(91, 0, 0, 0)
    time.sleep(1)
    win32api.keybd_event(77, 0, 0, 0)
    time.sleep(1)
    win32api.keybd_event(77, 0, win32con.KEYEVENTF_KEYUP)
    win32api.keybd_event(91, 0, win32con.KEYEVENTF_KEYUP)
    time.sleep(3)
    

鼠标模拟

import win32con
import win32api
import time

#设置鼠标的位置
win32api.SetCursorPos([100,160])
time.sleep(0.1)


#双击鼠标左键
#鼠标左键按下
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,0,0,0)
#鼠标左键抬起
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,0,0,0)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,0,0,0)
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,0,0,0)

发布了51 篇原创文章 · 获赞 29 · 访问量 2394

猜你喜欢

转载自blog.csdn.net/fangweijiex/article/details/103716237