我使用python的tkinter编写了一个程序,用pyinstaller编译之后,程序提示
failed to execute script 文件名
错误提示:
no module named 'numpy.random.common'
可是我重新pip numpy模块还是不好用 请问怎么解决?
#!/usr/bin/python
# -- coding: utf-8 --
import fnmatch #选择文件的关键词
import os
from time import sleep
from tkinter import *
import tkinter.filedialog #弹出选择路径的库
import tkinter.messagebox
import fnmatch #选择文件的关键词
import re
import pandas as pd
import docx
import pickle
import codecs
import string
import shutil
from win32com import client as wc
def matchdocname(str1,root,i,list_box):
if str1 in os.path.splitext(i)[0]:
list_box.insert(END, root+"/"+i)
def matchdoccontent(str1,root,i,list_box):
if i.endswith('txt'): #当文件为txt时
with open(os.path.join(root, i) ,'r') as fp:
errors=''
aa=fp.read()
if str1 in aa :
list_box.insert(END, root+"/"+i)
if i.endswith('xls') or i.endswith('xlsx') : #当文件为excel时
df=pd.read_excel(os.path.join(root, i))
df=df.values
for k in df:
for j in k:
j=str(j)
if str1 in j:
list_box.insert(END, root+"/"+i)
if i.endswith('docx'): #当文件为.docx时
word = wc.Dispatch('Word.Application')
doc = word.Documents.Open(os.path.join(root, i))
newname=os.path.join(root, i)+"(translate txt)"
doc.SaveAs(newname,4)
doc.Close()
word.Quit()
with open(newname ,'r') as fp:
errors=''
aa=fp.read()
if str1 in aa :
list_box.insert(END, root+"/"+i)
os.remove(newname)
if i.endswith('doc'): #当文件为.doc时
word = wc.Dispatch('Word.Application')
doc = word.Documents.Open(os.path.join(root, i))
newname=os.path.join(root, i)+"(translate txt)"
doc.SaveAs(newname,4)
doc.Close()
word.Quit()
with open(newname ,'r') as fp:
errors=''
aa=fp.read()
if str1 in aa :
list_box.insert(END, root+"/"+i)
os.remove(newname) #删掉这个临时文件
def left():
if not entry.get() :#检测关键词输入框是否为空
tkinter.messagebox.showerror("提示信息:","出现以下错误:\n关键词不能为空")#弹出警告框
return #如果为空不再执行
if var1.get()==0 and var2.get()==0 :
tkinter.messagebox.showerror("提示信息:","出现以下错误:\n匹配项不能为空")#弹出警告框
return #如果为空不再执行
list_box.delete(0,END)
path = tkinter.filedialog.askdirectory()#弹出选择路径的窗口,path为获取的路径
path_list = os.walk(path)#获取一个列表目录的对象
for root, dirs, files in path_list:
#print root, dirs, files
if var1.get()==1 and var2.get()==0: #当只匹配文件名时
list_box.insert(END, '文件名')
for i in files:
matchdocname(entry.get(),root,i,list_box)
elif var1.get()==0 and var2.get()==1: #当只匹配文件内容时
list_box.insert(END, '文件内容')
for i in files:
matchdoccontent(entry.get(),root,i,list_box)
elif var1.get()==1 and var2.get()==1: #当既匹配文件名又匹配文件内容时
list_box.insert(END, '文件名')
for i in files:
matchdocname(entry.get(),root,i,list_box)
list_box.insert(END, '--------------')
list_box.insert(END, '文件内容')
for i in files:
matchdoccontent(entry.get(),root,i,list_box)
def func2(e):
if not list_box.curselection():#取双击的坐标52
return
path = list_box.get(list_box.curselection(),last=None)
os.startfile(path)
def nagea(e):
error = ''
tdir = dirs.get(dirs.curselection())
if os.path.isfile(tdir): #如果是文件 则打开
os.startfile(tdir)
elif os.path.isdir(tdir): #如果是文件夹 则调用dols
setDirAndGo()
def wenjianshu():
dirs.delete(0,END)
path = tkinter.filedialog.askdirectory()#弹出选择路径的窗口,path为获取的路径
doLS1(path)
#双击时调用,双击时,设置背景色为红色,并调用doLS函数打开所选文件
def setDirAndGo(ev=None):
last = cwd.get()
dirs.config(selectbackground='red')
check = dirs.get(dirs.curselection())
if not check:
check = os.curdir
cwd.set(check)
doLS()
#实现更新目录的核心函数
def doLS(ev=None):
error = ''
tdir = cwd.get()
if not tdir:tdir=os.curdir
#若路径输入错误,或者打开的是文件,而不是目录,则更新错误提示信息
if not os.path.exists(tdir):
error = os.getcwd()+'\\'+tdir + ':未找到文件'
elif not os.path.isdir(tdir):
error = os.getcwd()+'\\'+tdir + ':未找到目录'
if error:
cwd.set(error)
top2.update()
sleep(1)
cwd.set(os.curdir)
dirs.config(selectbackground='LightSkyBlue')
top2.update()
return
cwd.set(os.getcwd()+'\\'+tdir)
top2.update()
dirlist = os.listdir(tdir)#os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表。
dirlist.sort()
os.chdir(tdir)#os.chdir() 方法用于改变当前工作目录到指定的路径。
#更新界面上方标签内容
dirl.config(text=os.getcwd())
top2.update()
dirs.delete(0,END)
dirs.insert(END,os.pardir)#os.chdir(os.pardir) 切换到上级目录 即将上级目录.. 插入到dirs对象中
#把选定目录的文件或文件夹的名字的列表依次插入到dirs对象中
for eachFile in dirlist:
dirs.insert(END,eachFile)
cwd.set(os.curdir)
dirs.config(selectbackground='LightSkyBlue')
def doLS1(tdir):
error = ''
if not tdir:tdir=os.curdir
#若路径输入错误,或者打开的是文件,而不是目录,则更新错误提示信息
if not os.path.exists(tdir):
error = os.getcwd()+'\\'+tdir + ':未找到文件'
elif not os.path.isdir(tdir):
error = os.getcwd()+'\\'+tdir + ':未找到目录'
if error:
cwd.set(error)
top2.update()
sleep(1)
cwd.set(os.curdir)
dirs.config(selectbackground='LightSkyBlue')
top2.update()
return
cwd.set(os.getcwd()+'\\'+tdir)
top2.update()
dirlist = os.listdir(tdir)#os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表。
dirlist.sort
os.chdir(tdir)#os.chdir() 方法用于改变当前工作目录到指定的路径。
#更新界面上方标签内容
dirl.config(text=os.getcwd())
top2.update()
dirs.delete(0,END)
dirs.insert(END,os.pardir)#os.chdir(os.pardir) 切换到上级目录 即将上级目录.. 插入到dirs对象中
#把选定目录的文件或文件夹的名字的列表依次插入到dirs对象中
for eachFile in dirlist:
dirs.insert(END,eachFile)
cwd.set(os.curdir)
dirs.config(selectbackground='LightSkyBlue')
top2 = Tk()
top2.title('营销集约管控中心-文件管理')
top2.geometry('+50+50')#窗口大小,窗口位置
cwd = StringVar(top2)
var=IntVar()
dirl = Label(top2,fg = 'BLUE',font = ('Helvetica',18,'bold'))
dirl.pack()
dirfm = Frame(top2)
dirs = Listbox(dirfm,height=25,width=90)
#通过使用List的bind()方法,将鼠标双击事件绑定,并调用setDirAndGo函数
dirs.bind('<Double-1>',nagea)
dirs.pack(side=LEFT,fill=BOTH)
list_box = Listbox(dirfm,height=25,width=90)
list_box.bind('<Double-Button-1>',func2) #绑定一个双击触发事件
list_box.pack(side=LEFT,fill=BOTH)#显示列表框
dirfm.pack()
#第二个框架bfm,放置按钮
bfm = Frame(top2)
open1 = Button(bfm,text='文件树',command=wenjianshu,activeforeground='white',activebackground='blue')
open1.pack(side=LEFT)
bfm.pack(side=LEFT,fill=BOTH)
#多选框插件
var1 = tkinter.IntVar() # 用来储存下面勾选项1中返回的0或1
var2 = tkinter.IntVar() # 用来储存下面勾选项2中返回的0或1
button2=tkinter.Checkbutton(top2,text="匹配文件内容",variable=var2,onvalue=1,offvalue=0)
button2.pack(side=RIGHT,fill=BOTH)
button1=tkinter.Checkbutton(top2,text="匹配文件名",variable=var1,onvalue=1,offvalue=0)
button1.pack(side=RIGHT,fill=BOTH)
#按钮控件
entry = Entry()#输入框实例化
entry.pack(side=RIGHT,fill=BOTH)#输入框
button2=Button(top2,text="关键字",command=left)
button2.pack(side=RIGHT,fill=BOTH)
if __name__ =='__main__':
#设定初始目录为桌面
mainloop()