分享一个简单的python tkinker实现的答题工具,效果参见https://www.bilibili.com/video/BV13e4y1E71d/

点击查看代码
import tkinter
from tkinter import *
from tkinter import messagebox
import os
from matplotlib.backends._backend_tk import NavigationToolbar2Tk
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure def center_window(root, w, h):
ws = root.winfo_screenwidth()
hs = root.winfo_screenheight()
x = (ws / 2) - (w / 2)
y = (hs / 2) - (h / 2)
root.geometry("%dx%d+%d+%d" % (w, h, x, y))
root.minsize(w, h)
root.maxsize(w, h) def checkusername(username, login):
if not username:
return False
if '\n' in username:
return False
userfile = open("user/username.txt", mode='r')
for i in userfile:
if i[0: len(i) - 1] == username:
return login
return not login def checkpassword(username, password):
if not password:
return False
uapfile = open('user/uernameandpassword.txt', 'r')
i = '1'
while (i):
i = uapfile.readline()
k = uapfile.readline()
if i[0: len(i) - 1] == username:
if k[0: len(k) - 1] == password:
return True
else:
return False class index:
def __init__(self, master):
self.index = tkinter.Frame()
self.index.pack()
global img
img = PhotoImage(file='img/logo1.gif')
imglabel = Label(self.index, image=img, compound='center')
imglabel.grid()
usernamelabel = Label(self.index, text="用户名", font=("sold", 25))
usernamelabel.grid(column=0, row=1)
usernametext = Entry(self.index, font=("sold", 25), width=30)
usernametext.grid(column=0, row=2)
passwordlabel = Label(self.index, text="密码", font=("sold", 25))
passwordlabel.grid(column=0, row=3)
passwordtext = Entry(self.index, font=("sold", 25), width=30, show="*")
passwordtext.grid(column=0, row=4)
blank = Label(self.index, text="", font=("sold", 10))
blank.grid(column=0, row=5)
blank = Label(self.index, text="", font=("sold", 10))
blank.grid(column=0, row=7)
submit = Button(self.index, font=('sold', 20), width=20, text="登录",
command=lambda: self.login(self, usernametext.get(), passwordtext.get()), relief=RIDGE)
regist = Button(self.index, font=('sold', 20), width=20, text="注册", command=lambda: self.regist(self),
relief=RIDGE)
submit.grid(column=0, row=6)
regist.grid(column=0, row=8) def login(self, master, username, password):
if checkusername(username, True): # 检查用户名是否已经存在
if checkpassword(username, password): # 检查用户名和密码是否匹配
self.index.destroy()
myindex(self, username)
else:
messagebox.showinfo("登录失败", "密码错误\n")
else:
messagebox.showinfo("登录失败", "用户名不合法或不存在\n") def regist(self, master):
self.index.destroy()
register(self) class register:
def __init__(self, master):
self.register = tkinter.Frame()
self.register.pack()
imglabel = Label(self.register, image=img, compound='center')
imglabel.grid()
usernamelabel = Label(self.register, text="用户名", font=("sold", 25))
usernamelabel.grid(column=0, row=1)
usernametext = Entry(self.register, font=("sold", 25), width=30)
usernametext.grid(column=0, row=2)
passwordlabel = Label(self.register, text="密码", font=("sold", 25))
passwordlabel.grid(column=0, row=3)
passwordtext = Entry(self.register, font=("sold", 25), width=30, show="*")
passwordtext.grid(column=0, row=4)
blank = Label(self.register, text="", font=("sold", 10))
blank.grid(column=0, row=5)
blank = Label(self.register, text="", font=("sold", 10))
blank.grid(column=0, row=7)
tryregist = Button(self.register, font=('sold', 20), width=20, text="注册",
command=lambda: self.toregist(self, usernametext.get(), passwordtext.get()), relief=RIDGE) backindex = Button(self.register, font=('sold', 20), width=20, text="返回主页",
command=lambda: self.indexback(self), relief=RIDGE)
tryregist.grid(column=0, row=6)
backindex.grid(column=0, row=8) def toregist(self, master, username, password):
if not password:
messagebox.showinfo("注册失败", "请输入密码\n")
return
if checkusername(username, False): # 检查用户名是否已经存在
messagebox.showinfo("注册成功", "你的用户名是%s" % username + ",密码是%s" % password)
userfile = open("user/username.txt", 'a') # 保存用户名和密码信息
userfile.write(username + '\n')
userfile.close()
uapfile = open('user/uernameandpassword.txt', 'a')
uapfile.write(username + '\n')
uapfile.write(password + '\n')
uapfile.close()
path = 'user/' + username # 创建用户专属文件夹和文件
os.mkdir(path)
file = open('%s/record.txt' % path, 'a')
file.write('1 1 1')
file.close()
file = open('%s/wrongs.txt' % path, 'w')
file.close()
file = open('%s/wrongj.txt' % path, 'w')
file.close()
file = open('%s/self.txt' % path, 'a')
file.write('0 0 0 0')
file.close()
file = open('%s/statisticss.txt' % path, 'a')
for i in range(50):
file.write('0 ')
file.write('\n')
file.write('0')
for i in range(49):
file.write(' 0')
file.close()
file = open('%s/statisticsj.txt' % path, 'a')
for i in range(50):
file.write('0 ')
file.write('\n')
file.write('0')
for i in range(49):
file.write(' 0')
file.close()
self.indexback(self)
else:
messagebox.showinfo("注册失败", "用户名不合法或已存在\n") def indexback(self, master):
self.register.destroy()
index(self) class myindex:
def __init__(self, master, text):
self.myindex = tkinter.Frame()
self.myindex.pack()
welcome = Label(self.myindex, text="欢迎您", font=("sold", 20), fg='purple')
welcome.grid(column=0, row=0)
user = Label(self.myindex, text=text, font=("sold", 20), fg='purple')
user.grid(column=1, row=0)
back = Button(self.myindex, text='退出登录', font=('sold', 15), command=lambda: self.indexback(self), relief=RIDGE)
back.grid(column=2, row=0)
single = Button(self.myindex, text='单选题', height=8, width=15, font=('sold', 12), bg='skyblue',
command=lambda: self.tosingle(self, text, False), relief=RIDGE)
single.grid(column=0, row=1)
judge = Button(self.myindex, text='判断题', height=8, width=15, font=('sold', 12), bg='orange',
command=lambda: self.tojudgement(self, text, False), relief=RIDGE)
judge.grid(column=1, row=1)
qblank = Button(self.myindex, text='简答题', height=8, width=15, font=('sold', 12), bg='pink',
command=lambda: self.tobrief(self, text), relief=RIDGE)
qblank.grid(column=2, row=1)
wrongs = Button(self.myindex, text='单选错题', height=8, width=15, font=('sold', 12), bg='red', relief=RIDGE,
command=lambda: self.tosingle(self, text, True))
wrongs.grid(column=0, row=2)
wrongj = Button(self.myindex, text='判断错题', height=8, width=15, font=('sold', 12), bg='red', relief=RIDGE,
command=lambda: self.tojudgement(self, text, True))
wrongj.grid(column=1, row=2)
store = Button(self.myindex, text='我', height=8, width=15, font=('sold', 12), bg='green', relief=RIDGE,
command=lambda: self.toself(self, text))
store.grid(column=2, row=2)
statisticss = Button(self.myindex, text='单选正确率', height=8, width=15, font=('sold', 12), bg='grey', relief=RIDGE,
command=lambda: self.tostatisticss(self, text))
statisticss.grid(column=0, row=3)
statisticsj = Button(self.myindex, text='判断正确率', height=8, width=15, font=('sold', 12), bg='grey', relief=RIDGE,
command=lambda: self.tostatisticsj(self, text))
statisticsj.grid(column=1, row=3)
store = Button(self.myindex, text='题库', height=8, width=15, font=('sold', 12), bg='brown', relief=RIDGE,
command=lambda: self.tostore(self, text))
store.grid(column=2, row=3) def indexback(self, master):
self.myindex.destroy()
index(self) def tosingle(self, master, username, wrongset):
self.myindex.destroy()
mysingle(self, username, wrongset, 0) def tojudgement(self, master, username, wrongset):
self.myindex.destroy()
myjudgement(self, username, wrongset, 0) def tobrief(self, master, username):
self.myindex.destroy()
mybrief(self, username, 0) def toself(self, master, username):
self.myindex.destroy()
myself(self, username) def tostatisticss(self, master, username):
self.myindex.destroy()
mystatisticss(self, username) def tostatisticsj(self, master, username):
self.myindex.destroy()
mystatisticsj(self, username) def tostore(self, master, username):
self.myindex.destroy()
allstore(self, username) class allstore:
def __init__(self, master, username):
self.allstore = tkinter.Frame()
self.allstore.pack()
selected = IntVar()
pa = Radiobutton(self.allstore, text='单选题(共50题)', value=1, variable=selected, font=("sold", 12), wraplength=400)
pb = Radiobutton(self.allstore, text='判断题(共50题)', value=2, variable=selected, font=("sold", 12), wraplength=400)
pc = Radiobutton(self.allstore, text='简答题(共10题)', value=3, variable=selected, font=("sold", 12), wraplength=400)
sign = Label(self.allstore, font=("sold", 25), width=30, text='请输入题号')
no = Entry(self.allstore, font=("sold", 25), width=30)
check = Button(self.allstore, text='提交',
command=lambda: self.change(self, selected, username, no.get()),
relief=RIDGE, font=('sold', 15), width=20)
pa.grid()
pb.grid()
pc.grid()
sign.grid()
no.grid()
check.grid()
back = Button(self.allstore, text='返回', command=lambda: self.back(self, username),
relief=RIDGE,
font=('sold', 15), width=20)
back.grid() def back(self, master, username):
self.allstore.destroy()
myindex(self, username) def change(self, master, selected, username, no):
v = selected.get()
if v == 0:
messagebox.showinfo("啊哦", "请选择题目类型\n")
else:
try:
if v == 1:
if 0 < int(no) <= 50:
self.allstore.destroy()
mysingle(self, username, False, no)
elif v == 2:
if 0 < int(no) <= 50:
self.allstore.destroy()
myjudgement(self, username, False, no)
elif v == 3:
if 0 < int(no) <= 10:
self.allstore.destroy()
mybrief(self, username, no)
except BaseException:
messagebox.showinfo("啊哦", "非法操作\n") def readrecord(sign, username, wrongset):
if wrongset:
if sign == 0:
record = open('user/%s/wrongs.txt' % username, 'r')
all = record.readlines()
record.close()
if len(all) != 0:
k = all[0]
file = open('user/%s/wrongs.txt' % username, 'w')
for i in all:
if i != k:
file.write(i)
file.close()
return k[0:len(k) - 1]
return False
if sign == 1:
record = open('user/%s/wrongj.txt' % username, 'r')
all = record.readlines()
record.close()
if len(all) != 0:
k = all[0]
file = open('user/%s/wrongj.txt' % username, 'w')
for i in all:
if i != k:
file.write(i)
file.close()
return k[0:len(k) - 1]
return False
record = open('user/%s/record.txt' % username, 'r')
k = record.readline().split(' ')
return k[sign] def selfdata(username, ty, right):
file = open('user/%s/self.txt' % username, 'r')
k = file.readline().split(' ')
file.close()
k[ty * 2] = str(int(k[ty * 2]) + 1)
k[ty * 2 + 1] = str(int(k[ty * 2 + 1]) + right)
file = open('user/%s/self.txt' % username, 'w')
file.write('%s %s %s %s' % (k[0], k[1], k[2], k[3]))
file.close() def statistics(username, no, right, ty):
file = open('user/%s/%s.txt' % (username, ty), 'r')
k1 = file.readline().split(' ')
k2 = file.readline().split(' ')
file.close()
no = int(no)
k1[no - 1] = str(int(k1[no - 1]) + right)
k2[no - 1] = str(int(k2[no - 1]) + 1)
file = open('user/%s/%s.txt' % (username, ty), 'w')
file.write(k1[0])
for i in range(1, 51):
file.write(' %s' % k1[i])
file.write('%s' % k2[0])
for i in range(1, 50):
file.write(' %s' % k2[i])
file.close() class mysingle:
def __init__(self, master, username, wrongset, num):
self.mysingle = tkinter.Frame()
self.mysingle.pack()
if num == 0: # 读取题号
no = readrecord(0, username, wrongset)
else:
no = num
if not no:
messagebox.showinfo("啊哦", "目前还没有错题\n")
self.back(self, username)
return
problem = open('single/s%s.txt' % no, 'r', encoding='UTF-8') # 根据题号读取文件信息
p = list()
for i in problem:
p.append(i)
pp = Label(self.mysingle, text=p[0], font=("sold", 12), wraplength=400) # 通过Label展示题目
pp.grid(column=0, row=0)
selected = IntVar()
pa = Radiobutton(self.mysingle, text=p[1], value=1, variable=selected, font=("sold", 12), wraplength=400)
pb = Radiobutton(self.mysingle, text=p[2], value=2, variable=selected, font=("sold", 12), wraplength=400)
pc = Radiobutton(self.mysingle, text=p[3], value=3, variable=selected, font=("sold", 12), wraplength=400)
pd = Radiobutton(self.mysingle, text=p[4], value=4, variable=selected, font=("sold", 12), wraplength=400)
ans = p[5]
pa.grid(column=0, row=1)
pb.grid(column=0, row=2)
pc.grid(column=0, row=3)
pd.grid(column=0, row=4)
s = ''
if int(no) == 50:
s = '这是最后一题'
feedback = Label(self.mysingle, text=s, wraplength=400, font=("sold", 12))
feedback.grid(column=0, row=7)
check = Button(self.mysingle, text='提交',
command=lambda: self.judge(self, selected, pa, pb, pc, pd, ans, feedback, check, username, no,
wrongset),
relief=RIDGE, font=('sold', 15), width=20)
check.grid(column=0, row=5)
back = Button(self.mysingle, text='返回', command=lambda: self.back(self, username), relief=RIDGE,
font=('sold', 15), width=20)
back.grid(column=0, row=6) def judge(self, master, selected, pa, pb, pc, pd, ans, feedback, check, username, no, wrongset):
v = selected.get() # 获得用户的选择,判断回答正确还是错误
if not v:
messagebox.showinfo("提交失败", "请选择答案\n")
return
if int(ans) == 1:
pa.configure(bg='green')
elif int(ans) == 2:
pb.configure(bg='green')
elif int(ans) == 3:
pc.configure(bg='green')
elif int(ans) == 4:
pd.configure(bg='green')
if int(v) == int(ans): # 回答正确的相关操作
feedback.configure(text='回答正确', fg='green')
selfdata(username, 0, 1)
statistics(username, no, 1, 'statisticss')
file = open('user/%s/wrongs.txt' % username, 'r')
k = file.readlines()
file.close()
s = no + '\n'
file = open('user/%s/wrongs.txt' % username, 'w')
for i in k:
if i != s:
file.write(i)
file.close()
else: # 回答错误的相关操作
feedback.configure(text='回答错误', fg='red')
selfdata(username, 0, 0) # 进行总数和正确数量的统计
statistics(username, no, 0, 'statisticss') # 更新数据以便正确率图形绘制
file = open('user/%s/wrongs.txt' % username, 'r') # 如果错题集中没有该题,加入错题集
k = file.readlines()
file.close()
s = no + '\n'
exist = False
for i in k:
if i == s:
exist = True
if not exist:
file = open('user/%s/wrongs.txt' % username, 'a')
file.write('%s\n' % no)
file.close()
if v == 1:
pa.configure(bg='red')
elif v == 2:
pb.configure(bg='red')
elif v == 3:
pc.configure(bg='red')
elif v == 4:
pd.configure(bg='red')
check.configure(text='下一题', command=lambda: self.nextq(self, username, no, wrongset), relief=RIDGE) def nextq(self, master, username, no, wrongset):
if not wrongset:
record = open('user/%s/record.txt' % username, 'r')
k = record.readline().split(' ')
record.close()
record = open('user/%s/record.txt' % username, 'w+')
nextone = int(no) + 1
if nextone == 51:
nextone = 1
k[0] = str(nextone)
record.write("%s %s %s" % (k[0], k[1], k[2]))
record.close()
self.mysingle.destroy()
mysingle(self, username, wrongset, 0) def back(self, master, username):
self.mysingle.destroy()
myindex(self, username) class myjudgement:
def __init__(self, master, username, wrongset, num):
self.myjudgement = tkinter.Frame()
self.myjudgement.pack()
if num == 0:
no = readrecord(1, username, wrongset)
else:
no = num
if not no:
messagebox.showinfo("啊哦", "目前还没有错题\n")
self.back(self, username)
return
problem = open('judgement/j%s.txt' % no, 'r', encoding='UTF-8')
p = list()
for i in problem:
p.append(i)
pp = Label(self.myjudgement, text=p[0], font=("sold", 12), wraplength=400)
pp.grid(column=0, row=0)
ans = p[1][0]
explain = ''
if len(p) == 3:
explain = p[2]
selected = IntVar()
pr = Radiobutton(self.myjudgement, text='正确', value=1, variable=selected, font=("sold", 12), wraplength=400)
pw = Radiobutton(self.myjudgement, text='错误', value=2, variable=selected, font=("sold", 12), wraplength=400)
pr.grid(column=0, row=1)
pw.grid(column=0, row=2)
s = ''
if int(no) == 50:
s = '这是最后一题'
feedback = Label(self.myjudgement, text=s, wraplength=400, font=("sold", 12))
feedback.grid(column=0, row=5)
check = Button(self.myjudgement, text='提交',
command=lambda: self.judge(self, selected, pr, pw, ans, explain, feedback, check, username, no,
wrongset),
relief=RIDGE, font=('sold', 15), width=20)
check.grid(column=0, row=3)
back = Button(self.myjudgement, text='返回', command=lambda: self.back(self, username), relief=RIDGE,
font=('sold', 15), width=20)
back.grid(column=0, row=4) def judge(self, master, selected, pr, pw, ans, explain, feedback, check, username, no, wrongset):
v = selected.get()
if not v:
messagebox.showinfo("提交失败", "请选择答案\n")
return
if int(ans) == 1:
pr.configure(bg='green')
elif int(ans) == 2:
pw.configure(bg='green')
if int(v) == int(ans):
feedback.configure(text='回答正确, %s' % explain, fg='green')
selfdata(username, 1, 1)
statistics(username, no, 1, 'statisticsj')
file = open('user/%s/wrongj.txt' % username, 'r')
k = file.readlines()
file.close()
s = no + '\n'
file = open('user/%s/wrongj.txt' % username, 'w')
for i in k:
if i != s:
file.write(i)
file.close()
else:
feedback.configure(text='回答错误, %s' % explain, fg='red')
selfdata(username, 1, 0)
statistics(username, no, 0, 'statisticsj')
file = open('user/%s/wrongj.txt' % username, 'r')
k = file.readlines()
file.close()
s = no + '\n'
exist = False
for i in k:
if i == s:
exist = True
if not exist:
file = open('user/%s/wrongj.txt' % username, 'a')
file.write('%s\n' % no)
file.close()
if v == 1:
pr.configure(bg='red')
elif v == 2:
pw.configure(bg='red')
check.configure(text='下一题', command=lambda: self.nextq(self, username, no, wrongset)) def nextq(self, master, username, no, wrongset):
if not wrongset:
record = open('user/%s/record.txt' % username, 'r')
k = record.readline().split(' ')
record.close()
record = open('user/%s/record.txt' % username, 'w+')
nextone = int(no) + 1
if nextone == 51:
nextone = 1
k[1] = str(nextone)
record.write("%s %s %s" % (k[0], k[1], k[2]))
record.close()
self.myjudgement.destroy()
myjudgement(self, username, wrongset, 0) def back(self, master, username):
self.myjudgement.destroy()
myindex(self, username) class mybrief:
def __init__(self, master, username, num):
self.mybrief = tkinter.Frame()
self.mybrief.pack()
if num == 0:
no = readrecord(2, username, False)
else:
no = num
problem = open('brief/b%s.txt' % no, 'r', encoding='UTF-8')
p = list()
for i in problem:
p.append(i)
pp = Label(self.mybrief, text=p[0], font=("sold", 12), wraplength=400)
pp.grid(column=0, row=0)
myanswer = Entry(self.mybrief, font=("sold", 25), width=30, justify=LEFT)
myanswer.grid(column=0, row=1)
s = ''
if int(no) == 10:
s = '这是最后一题'
check = Button(self.mybrief, text='提交',
command=lambda: self.judge(self, feedback, check, username, no, p[1]), relief=RIDGE
, font=('sold', 15), width=20)
check.grid(column=0, row=2)
back = Button(self.mybrief, text='返回', command=lambda: self.back(self, username), relief=RIDGE
, font=('sold', 15), width=20)
back.grid(column=0, row=3)
feedback = Label(self.mybrief, text=s, wraplength=400, font=("sold", 12), justify=LEFT)
feedback.grid(column=0, row=4) def back(self, master, username):
self.mybrief.destroy()
myindex(self, username) def judge(self, master, feedback, check, username, no, answer):
feedback.configure(text=answer)
check.configure(text='下一题', command=lambda: self.nextq(self, username, no)) def nextq(self, master, username, no):
record = open('user/%s/record.txt' % username, 'r')
k = record.readline().split(' ')
record.close()
record = open('user/%s/record.txt' % username, 'w+')
nextone = int(no) + 1
if nextone == 11:
nextone = 1
k[2] = str(nextone)
record.write("%s %s %s" % (k[0], k[1], k[2]))
record.close()
self.mybrief.destroy()
mybrief(self, username, 0) class myself:
def __init__(self, master, username):
self.myself = tkinter.Frame()
self.myself.pack()
file = open('user/%s/self.txt' % username, 'r')
k = file.readline().split(' ')
label = Label(self.myself,
text="%s\n你一共完成了%s道单选题,其中正确%s道\n你一共完成了%s道判断题,其中正确%s道" % (username, k[0], k[1], k[2], k[3]),
font=("sold", 25), wraplength=400)
label.grid()
back = Button(self.myself, text='返回', command=lambda: self.back(self, username), relief=RIDGE,
font=('sold', 15), width=20)
back.grid() def back(self, master, username):
self.myself.destroy()
myindex(self, username) class mystatisticss:
def __init__(self, master, username):
self.mystatisticss = tkinter.Frame()
self.mystatisticss.pack()
file = open('user/%s/%s.txt' % (username, 'statisticss'), 'r') # 获取用户数据
k1 = list(map(int, file.readline().split(' ')[0:50]))
k2 = list(map(int, file.readline().split(' ')))
file.close()
y = list()
x = list()
for i in range(50):
x.append(i + 1)
if k2[i] == 0:
y.append(0)
else:
y.append(k1[i] / k2[i])
f = Figure(figsize=(5, 4), dpi=100) # 绘制图像
a = f.add_subplot(111)
a.plot(x, y)
f.supylabel('Correct rate')
f.supxlabel('no')
c = FigureCanvasTkAgg(f, main)
c.draw()
c.get_tk_widget().pack()
toolbar = NavigationToolbar2Tk(c, main) # 添加图像工具栏
toolbar.update()
back = Button(self.mystatisticss, text='返回', command=lambda: self.back(self, username, c, toolbar),
relief=RIDGE,
font=('sold', 15), width=20)
back.grid() def back(self, master, username, c, toolbar):
c.get_tk_widget().destroy()
toolbar.destroy()
self.mystatisticss.destroy()
myindex(self, username) class mystatisticsj:
def __init__(self, master, username):
self.mystatisticsj = tkinter.Frame()
self.mystatisticsj.pack()
file = open('user/%s/%s.txt' % (username, 'statisticsj'), 'r')
k1 = list(map(int, file.readline().split(' ')[0:50]))
k2 = list(map(int, file.readline().split(' ')))
file.close()
y = list()
x = list()
for i in range(50):
x.append(i + 1)
if k2[i] == 0:
y.append(0)
else:
y.append(k1[i] / k2[i])
f = Figure(figsize=(5, 4), dpi=100)
a = f.add_subplot(111)
a.bar(x, y)
f.supylabel('Correct rate')
f.supxlabel('no')
c = FigureCanvasTkAgg(f, main)
c.draw()
c.get_tk_widget().pack()
toolbar = NavigationToolbar2Tk(c, main)
toolbar.update()
back = Button(self.mystatisticsj, text='返回', command=lambda: self.back(self, username, c, toolbar),
relief=RIDGE,
font=('sold', 15), width=20)
back.grid() def back(self, master, username, c, toolbar):
c.get_tk_widget().destroy()
toolbar.destroy()
self.mystatisticsj.destroy()
myindex(self, username) if __name__ == '__main__':
main = tkinter.Tk(className='python小助手')
center_window(main, 500, 500)
index(main)
main.mainloop()

python tkinker答题工具简易实现的更多相关文章

  1. Python 和 Elasticsearch 构建简易搜索

    Python 和 Elasticsearch 构建简易搜索 作者:白宁超 2019年5月24日17:22:41 导读:件开发最大的麻烦事之一就是环境配置,操作系统设置,各种库和组件的安装.只有它们都正 ...

  2. 笔记13:Python 和 Elasticsearch 构建简易搜索

    Python 和 Elasticsearch 构建简易搜索 1 ES基本介绍 概念介绍 Elasticsearch是一个基于Lucene库的搜索引擎.它提供了一个分布式.支持多租户的全文搜索引擎,它可 ...

  3. Python自然语言处理工具小结

    Python自然语言处理工具小结 作者:白宁超 2016年11月21日21:45:26 目录 [Python NLP]干货!详述Python NLTK下如何使用stanford NLP工具包(1) [ ...

  4. python 包管理工具

    python 包管理工具 Python当前的包管理工具链是 easy_install/pip + distribute/setuptools + distutils,显得较为混乱. 而将来的工具链组合 ...

  5. Python 包管理工具解惑

    Python 包管理工具解惑 本文链接:http://zengrong.net/post/2169.htm python packaging 一.困惑 作为一个 Python 初学者,我在包管理上感到 ...

  6. Python包管理工具介绍

    常见的包管理工具及关系 setuptools -->distribute easy_install-->pip 1.distribute distribute是对标准库disutils模块 ...

  7. python包管理工具

    pip 是一个安装和管理 Python 包的工具 , 是 easy_install 的一个替换品.本文将详细说明 安装 pip 的方法和 使用 pip 的一些基本操作如安装.更新和卸载 python ...

  8. Python学习笔记 (1) :python简介、工具、编码及基础运算

    学习背景: 精通一门编程语言并编写出自己喜欢的程序是我多年的梦想,一定要找时间实现.此时想起了高中时的我对编程的兴趣十分浓厚,父母给自己购买了学习机插卡式的,只能敲basic代码,同时学校有386计算 ...

  9. Python包管理工具和多版本环境管理

    1. Python包管理工具 在安装Python包的过程中,经常涉及到distutils.setuptools.distribute.setup.py.easy_install.easy_instal ...

  10. python入门:python包管理工具pip的安装

    pip 是一个安装和管理 Python 包的工具 , 是 easy_install 的一个替换品. distribute是setuptools的取代(Setuptools包后期不再维护了),pip是e ...

随机推荐

  1. 2020年最新版区块链面试题2-copy

    1. 问:你认为区块链技术中的区块意味着什么? 区块链由所有金融交易的信息组成.一个块只不过是一个记录列表.当这些列表相互结合时,它们被称为区块链.例如,一个组织有100个分类账簿,其中的组合被称为区 ...

  2. VOLE+OKVS的PSI技术落地应用

    学习&转载文章:技术创新〡VOLE+OKVS的PSI技术落地应用 神谱科技基于VOLE+OKVS设计了两方PSI和多方PSI协议,并已应用于Seceum系列隐私计算产品中. Seceum并无开 ...

  3. Maven:目前的部分技术

  4. 云主机 vs 轻量型云主机:性能与灵活性的平衡

    本文分享自天翼云开发者社区<云主机 vs 轻量型云主机:性能与灵活性的平衡>,作者:冯****芙 什么是轻量型云主机.什么是云主机? 云主机是云计算的一种基础设施服务模型,它是在云平台上通 ...

  5. 玩转云端 | 网络也i人?咋变显眼包?天翼云AccessOne边缘接入来了!

    你是具有"社牛"属性的"e人" 还是"社恐"属性的"i人"? 在年轻群体中火起来的 "MBTI人格测试&quo ...

  6. zos静态网站托管的使用和原理

    本文分享自天翼云开发者社区<zos静态网站托管的使用和原理> 作者:Ywq zos静态网站托管是一种功能强大且方便的功能特性,此特性主要用于将静态网站的文件(例如HTML.CSS.Java ...

  7. Linux操作文件IO

    Linux操作文件IO 参考自:[北京迅为]嵌入式linux开发指南_v1.1(i.MX6ULL) 文件 IO 是 Linux 系统提供的接口,针对文件和磁盘进行操作,不带缓存机制: 标准 IO 是 ...

  8. 批量上传序列到Gisaid数据库

    本文演示的是用Gisaid官网自带的Excel宏批量上传毒株信息和序列到Gisaid数据库,需要魔法. 1. 下载GISAID Batch Uploader 找到自己需要上传的病毒类型,我是Flu,在 ...

  9. Sqoop2 - [01] 安装部署

    1.启动Hadoop集群 2.将Sqoop2的安装包上传到合适的目录中解压 tar -zxvf sqoop-1.99.7-bin-hadoop200.tar.gz 3.修改Hadoop的配置文件cor ...

  10. .net 8 实现 JWT 无状态设计 token [附源码]

    本文主要分为两个部分: 1.概念 2..net 8 demo 第一部分主要描述所有与 JWT 相关的概念以及词汇,及其原理:第二部分是代码示例,文末附 源码下载. * 阅读提示 :鼠标悬停在 章节标题 ...