【Python之旅】第二篇(五):基于列表、字典和元组的员工信息处理接口

1.基本需求

    编写一个查询员工信息表的程序,实现如下功能:

(1)让用户输入不小于3个字符查询员工信息

(2)通过员工号或员工个人信息可以精确或模糊查询到员工信息

(3)输出员工信息


2.实现代码与注释

   首先提供员工信息的txt文件:


1

2

3

4

xpleaf@xpleaf-machine:/mnt/hgfs/Python/day3$ more student_info.txt 

stu1101 mingjia.xu 275896019@qq.com 263 SystemAdmin 18810404260

stu1102 Yangjiansong jason@s156.com A8music SystemAdmin 13601247960

stu1103 zouxinkai zouxinkai_2006@126.com jishubu systemadmin 1861214111

    基于上述需求,利用列表、字典和元组的相关处理函数,编写如下程序:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

#!/usr/bin/env python

staff_dic = {}    #从文件中读取员工信息,并作为字典处理

f = file('student_info.txt')

for line in f.xreadlines():

    stu_id, stu_name, mail, company, title, phone = line.split() #取文件一行中每一列元素

    staff_dic[stu_id] = [stu_name, mail, company, title, phone]   #key值对应的Value值为一列表

     

while True:

    query = raw_input('\033[32;1mPlease input the query string:\033[0m').strip() 

    if len(query) < 3:    #如果输入查询的字符少于3,则要求重新输入

        print 'You have to input at least 3 letters to query!'

        continue

     

    match_counter = 0 #计数器,判断是否有匹配到员工信息

    for k,v in staff_dic.items():    #.items(),key值作为列表中,元组的左元素,key值(这里为列表)则作为右元素

        index = k.find(query) #find()返回查询到字符串的首个字符的索引,找空串返回0,找不到返回-1

        if k.find(query) != -1:  #如果找到

            print k[:index] + '\033[32;1m%s\033[0m' % query + k[index + len(query):],v    #这里会有用户输入的内容进行颜色加深

            match_counter += 1

        else:

            str_v = '\t'.join(v)  #将列表中的元素连接为字符串

            index = str_v.find(query) #方法如上面查找key值一样

            if index != -1:

                print k,str_v[:index] + '\033[32;1m%s\033[0m' % query + str_v[index + len(query):]

                match_counter += 1

 

    print 'Matched \033[31;1m%s\033[0m records!' % (match_counter)


3.测试

    基于上述的情况,对可能出现的情况和结果,测试如下:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

Please input the query string:stu1101    ===>对员工号(键值)精确查询

stu1101 ['mingjia.xu''275896019@qq.com''263''SystemAdmin''18810404260']

Matched 1 records!

 

Please input the query string:stu    ===>对员工号(键值)模糊查询

stu1103 ['zouxinkai''zouxinkai_2006@126.com''jishubu''systemadmin''1861214111']

stu1102 ['Yangjiansong''jason@s156.com''A8music''SystemAdmin''13601247960']

stu1101 ['mingjia.xu''275896019@qq.com''263''SystemAdmin''18810404260']

Matched 3 records!

 

Please input the query string:kai    ===>对员工信息(value值)模糊查询

stu1103 zouxinkai  zouxinkai_2006@126.com  jishubu systemadmin 1861214111

Matched 1 records!

Please input the query string:zou

stu1103 zouxinkai  zouxinkai_2006@126.com  jishubu systemadmin 1861214111

Matched 1 records!


时间: 2024-08-03 10:04:16

【Python之旅】第二篇(五):基于列表、字典和元组的员工信息处理接口的相关文章

【Python之旅】第五篇(四):基于Python Sockct多线程的简版SSH程序

 还是继续延续篇五中前三节的例子,通过对代码的修修补补,把它改成一个可以在连接后就能在Client端执行Server端命令的程序,所以就有点类似于SSH连接程序了.     至于还是用前面的例子来改嘛,是因为上课也一直这么干,而且老师也讲得非常不错,自己吸收后也作为一个学习的记录吧,因为确实是非常不错的!     之所以能对前面的例子如这样的修改,应当有这样的思想:前面的例子中,Server端能够返回Client端输入的字符串,那么如果Client端输入的是Linux的shell命令,Serve

【Python之旅】第五篇(二):Python Socket单线程+阻塞模式

 前面第五篇(一)中的一个Socket例子其实就是单线程的,即Server端一次只能接受来自一个Client端的连接,为了更好的说明socket单线程和阻塞模式,下面对前面的例子做修改. 1.单线程+阻塞+交互式     前面的例子是单线程阻塞和非交互式的,现在改写为交互式的,即不会执行一次就结束,希望达到的效果是,发送的数据由User输入,然后Server端进行接收. Server端:与上个例子一样,并没有什么变化 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

【Python之旅】第五篇(一):Python Socket通信原理

 只要和网络服务涉及的,就离不开Socket以及Socket编程,下面就说说Python Socket通信的基本原理. 1.Socket     socket也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过"套接字"向网络发出请求或者应答网络请求.可以列举中国移动或者是中国电信等的电话客服,当然,也可以看下面的图片来作形象的说明.     socket起源于Unix,而Unix/Linux基本哲学之一就是:一切皆文件,即都可以用&quo

【Python之旅】第五篇(三):Python Socket多线程并发

 前面的几个例子都是单线程的,下面再来说说多线程的. 1.多线程模块     主要是socketserver模块,如下图示: 2.多线程原理     如下图示说明: 3.SockteServer例子说明 服务器端: 客户端: 4.演示     还是以前面例子,对代码进行修改,作如下的演示. Server端: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 import SocketServer            #导入SocketServer,

「C语言回顾之旅」第二篇:指针详解进阶

说明:     第一篇回顾了指针的基本概念以及基本使用,因此对指针也有了一个较为清晰的思路,但实际上第一篇关于指针的内容是不太容易忘记的.这是第二篇中的内容是比较容易混淆,但对于指针的进一步学习也是非常重要的. 一.指向函数的指针 1.函数指针 ·函数指针即指向函数的指针,函数指针值为函数的入口地址,通过使用该指针,即可以使用该函数: ·编写一个程序返回两个数的最大值,通过函数指针调用函数: a.main函数代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

CoreOS Fest 系列之第二篇: Systemd、Go、Calico、Sysdig

本文讲的是CoreOS Fest 系列之第二篇: Systemd.Go.Calico.Sysdig,[编者的话]在 CoreOS Fest 第二天的会议中,演讲者展示了多个开源项目和工具,包括 Systemd 和 CoreOS . Go 语言和容器. Calico 项目. Sysdig 等. 在 CoreOS Fest 的第一天会议中,陆续介绍了 CoreOS 的架构.规划和规范.第二天的会议,演讲者展示了多个开源项目和工具,包括 systemd-nspawn . Calico 项目和 Sysd

Android开源项目第二篇——工具库篇

Android开源项目第二篇--工具库篇 本文为那些不错的Android开源项目第二篇--开发工具库篇,主要介绍常用的开发库,包括依赖注入框架.图片缓存.网络相关.数据库ORM建模.Android公共库.Android 高版本向低版本兼容.多媒体相关及其他.   最新内容请访问AndroidOpenProject@Github,欢迎Star和Fork.   Android开源项目系列汇总已完成,包括: Android开源项目第一篇--个性化控件(View)篇Android开源项目第二篇--工具库

拒绝从入门到放弃_《Python 核心编程 (第二版)》必读目录

目录 目录 关于这本书 必看知识点 最后 关于这本书 <Python 核心编程 (第二版)>是一本 Python 编程的入门书,分为 Python 核心(其实并不核心,应该叫基础) 和 高级主题 两大部分,以 Python 2.x 作为主要演示版本,涵盖的知识面广,知识点较齐全,代码多且好理解,但对 Python 版本特性的内容太久远,不合时宜. 整体来说 Python 核心 部分是主要内容,高级主题 部分作为应用扩展内容.后半部分篇幅较短,内容不够深入,只到了解的层面,好在横向够广(每一个主

JavaWeb开发入门第二篇Tomcat服务器配置讲解_java

一.Tomcat服务器端口的配置 Tomcat的所有配置都放在conf文件夹之中,里面的server.xml文件是配置的核心文件. 如果想修改Tomcat服务器的启动端口,则可以在server.xml配置文件中的Connector节点进行的端口修改 例如:将Tomcat服务器的启动端口由默认的8080改成8081端口 Tomcat服务器启动端口默认配置 <Connector port="8080" protocol="HTTP/1.1" connectionT