吴裕雄--天生自然python学习笔记:python 用firebase实现英汉词典进阶版
用 post 方法创建的数据会自动产生一个 id (Key ),但有时也常常为了取得这个
id 而让程序难以处理 。 以英汉词典标准版来说,它的数据结构如下:

如果将每条数据都改为{eword:cword }结构,则会让代码更简化。 也就是 id( Key)
就是英文单词,而数据内容( Va lue )就是中文翻译 。 如下 :

要完成这个要求,则需要用到 put 方法 。 例如 : 在 English_adv 节点创建{’agree:同意’}这条数据。

导入程序数据
“ 3. 显示单词”的功能中,加
入了以英文单词由小到大排序的功能 。
def CkeckKey(no):
key_id=""
if datas != None:
for key in datas:
if no==key: # 读取键名
key_id = key
break
return key_id ### 主程序从这里开始 ### from firebase import firebase url = 'https://chiouapp01-74bde.firebaseio.com/English_adv/'
fb = firebase.FirebaseApplication(url, None)
datas=fb.get(url, None) with open('eword_less.csv','r', encoding = 'gbk') as f:
for line in f:
eword,cword = line.rstrip('\n').split(',')
if CkeckKey(eword) == "": # 判断键是否存在
fb.put(url,data=cword,name=eword)
print(eword,":",cword)
print("\n转换完毕!")
def menu():
os.system("cls")
print("英 汉 词 典")
print("-------------------------")
print("1. 翻 译 单 词")
print("2. 输 入 单 词")
print("3. 显 示 单 词")
print("4. 修 改 单 词")
print("5. 删 除 单 词")
print("0. 结 束 程 序")
print("-------------------------") def CkeckKey(no):
key_id=""
if datas != None:
for key,value in datas.items():
if no==key: # 读取键名
key_id = key
break
return key_id def input_data():
global datas
while True:
eword =input("请输入英文单字(Enter==>停止输入)")
if eword=="": break
key_id = CkeckKey(eword)
if key_id != "": # 判断键是否存在
print("{} 单词已存在!".format(datas.get(key_id)))
continue
cword=input("请输入中文翻译:")
fb.put(url, data=cword,name=eword)
time.sleep(2)
if datas == None: datas = dict()
datas[eword]=cword
print(eword,":",cword," 已存储完毕!")
def disp_data():
global datas
datas=fb.get(url, None)
if datas != None:
dc_sort = sorted(datas.items(),key = operator.itemgetter(0))
n,page=0,15
for item in dc_sort:
if n % page ==0:
print("单词\t中文翻译")
print("======================")
key=item[0]
print("{}\t{}".format(key,item[1]))
n+=1
if n == page:
c=input("请按 Enter 显示下一页,Q 键返回主菜单")
if c.upper() == "Q":return
n=0
c=input("请按任意键返回主菜单")
将 datas 字典根据字母进行排序后赋给 dc_sort 列表变茧, key=operator.
itemgetter(O)表示按第 0 个字段( Key 字段)排序。
def search_data():
while True:
eword =input("请输入要翻译的英文单词(Enter==>停止输入)")
if eword=="": break
key_id = CkeckKey(eword)
if key_id != "": # 判断键是否存在
print("中文翻译:{}".format(datas[key_id]))
else:
print("{}单词不存在!\n".format(eword))
input("请按任意键继续翻译…")
def edit_data():
while True:
eword =input("请输入要修改的英文单词(Enter==>停止输入)")
if eword=="": break
key_id = CkeckKey(eword)
if key_id != "": # 判断键是否存在
print("原来中文翻译:{}".format(datas[key_id]))
cword=input("请输入中文翻译:")
datas[key_id]=cword
fb.put(url + '/', data=cword, name=key_id)
time.sleep(2)
print(eword,":",cword," 已修改完毕!\n")
else:
print("{} 单词不存在!\n".format(eword))
把 key_id 的内容赋给 Key, 同时通过 datas[key_i d] =cword 更新 datas
字典中的该条数据。
def delete_data():
while True:
eword =input("请输入要删除的英文单词(Enter==>停止输入)")
if eword=="": break
key_id = CkeckKey(eword)
if key_id != "": # 判断键是否存在
print("确定删除 {} 的数据!".format(datas[key_id]),end="")
yn=input("(Y/N)?")
if (yn=="Y" or yn=="y"):
fb.delete(url + '/' + key_id,None)
datas.pop(key_id)
print("数据删除完毕\n")
else:
print("{} 单词不存在!\n".format(eword))
### 主程序从这里开始 ### import time,os
from firebase import firebase
import operator url = 'https://chiouapp01-dedce.firebaseio.com/English_adv'
fb = firebase.FirebaseApplication(url, None)
datas=fb.get(url, None) while True:
menu()
choice = input("请输入您的选择:")
try:
choice = int(choice)
print()
if choice==1:
search_data()
elif choice==2:
input_data()
elif choice==3:
disp_data()
elif choice==4:
edit_data()
elif choice==5:
delete_data()
else:
break
except:
print("非常按键!")
time.sleep(1)
print("程序执行完毕!")
吴裕雄--天生自然python学习笔记:python 用firebase实现英汉词典进阶版的更多相关文章
- 吴裕雄--天生自然HADOOP学习笔记:hadoop集群实现PageRank算法实验报告
实验课程名称:大数据处理技术 实验项目名称:hadoop集群实现PageRank算法 实验类型:综合性 实验日期:2018年 6 月4日-6月14日 学生姓名 吴裕雄 学号 15210120331 班 ...
- 吴裕雄--天生自然MySQL学习笔记:MySQL UPDATE 更新
如果需要修改或更新 MySQL 中的数据,我们可以使用 SQL UPDATE 命令来操作. 语法 以下是 UPDATE 命令修改 MySQL 数据表数据的通用 SQL 语法: UPDATE table ...
- 吴裕雄--天生自然MySQL学习笔记:MySQL 插入数据
MySQL 表中使用 INSERT INTO SQL语句来插入数据. 可以通过 mysql> 命令提示窗口中向数据表中插入数据,或者通过PHP脚本来插入数据. 以下为向MySQL数据表插入数据通 ...
- 吴裕雄--天生自然MySQL学习笔记:MySQL简介
MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用 ...
- 吴裕雄--天生自然 oracle学习笔记:oracle理论学习详解及各种简单操作例子
1. 数据库的发展过程 层次模型 -->网状模型 -->关系模型 -->对象关系模型 2. 关于数据库的概念 DB:数据库(存储信息的仓库) DBMS:数据库管理系统(用于管理数据库 ...
- 吴裕雄--天生自然HADOOP学习笔记:基本环境配置
实验目的 学习安装Java 学习配置环境变量 学习设置免密码登陆的方法 掌握Linux环境下时间同步的配置 实验原理 1.Java的安装 java是大数据的黄金语言,这和java跨平台的特性是密不可分 ...
- 吴裕雄--天生自然HADOOP学习笔记:使用yum安装更新软件
实验目的 了解yum的原理及配置 学习软件的更新与安装 学习源代码编译安装 实验原理 1.编译安装 前面我们讲到了安装软件的方式,因为linux是开放源码的,我们可以直接获得源码,自己编译安装.例如: ...
- 吴裕雄--天生自然HADOOP学习笔记:Shell工具使用
实验目的 学习使用xshell工具连接Linux服务器 在连上的服务器中进入用户目录 熟悉简单的文件操作命令 实验原理 熟悉shell命令是熟悉使用linux环境进行开发的第一步,我们在linux的交 ...
- 吴裕雄--天生自然HTML学习笔记:HTML 布局
网页布局对改善网站的外观非常重要. 请慎重设计您的网页布局. <!DOCTYPE html> <html> <head> <meta charset=&qu ...
随机推荐
- Python爬虫之解析网页
常用的类库为lxml, BeautifulSoup, re(正则) 以获取豆瓣电影正在热映的电影名为例,url='https://movie.douban.com/cinema/nowplaying/ ...
- JavaWeb之搭建自己的MVC框架(三)
1. 前言 在前两节的内容中,我们完成了一个基本的框架搭建.但是如果我们在前端请求中增加参数,我们要怎么传递到后台方法呢?接下来我们就来研讨这部分内容. 2. 实现 ( ...
- Neo4j--节点的增删查改基本用法
注 node-name 和 label-name node-name 有点句柄的味道. 从面向对象来理解,label-name相当于一个类,node-name相当于这个类的对象. 类比关系型数据库的 ...
- 10. react 基础 ref 的使用 及 React 16 的生命周期函数 及 生命周期函数使用场景
一. ref 的使用 ( 直接获取 DOM 元素 ) 在 input 标签上 可以使用 ref 属性 获取当前DOM节点 eg: import React , { Component, Fragmen ...
- npm全局权限设置 - Mac
网络上的常见方法 目前网络上常见的方法都是修改npm安装路径的权限 通过使用命令 npm config get prefix 得到npm的路径,结果大部分都是/usr/local.然后,很多方法都会要 ...
- php对象:get_object_vars(), get_parent_class(),is_subclass_of(),interface_exists()
get_object_vars():获得对象的属性,以关联数组形式返回 get_parent_class():获得对象的父类 is_subclass_of():判断对象是否某类(参数2)的子类实例出的 ...
- Freemarker的一点延生
1.freemarker一般不是单独使用,他可以和activeMQ互相结合,来完成功能的. 使用它有 几点好处, 首先就是提高程序效率,一般情况我们的页面都是jsp,而jsp实际上是servlet,在 ...
- JavaScript—面向对象 贪吃蛇_3 蛇对象
蛇对象 function Snake(element) { this.width = 20 this.height = 20 //蛇身 位置 颜色 this.body = [ {x: 6, y: 4, ...
- OpenCV和Qt的图像格式互转
做图像处理的时候经常使需要用到opencv的,这应该是免费的图像处理库中用得最广泛而且最好用的库了吧.然后有时候想用界面来展示点东西的时候,我们就需要编写个界面,编写界面的方法千千万,弱水三千我只取一 ...
- 22. docker 数据持久化 Data Volume
1 . 使用场景 在docker 容器被删除的时候 希望数据不丢失 2 . Volume 的使用 * 注意 在 mysql 的 Dockerfile 内 定义了 VOLUME ["var/ ...