需求:

基于公司的文化和公司部门间以及员工之间的工作需求状态,或者想要了解某一些技能、专业方面的知识需求。促进并提高员工们的技能认知和技术水平。

详细代码如下:

先说一下存入csv表格的表头字段:

1、姓名:

从名单中随机抽取,每次抽取后,后面都会进行判断,将已分享过的人员名单剔除,保证人员不会重复

2、知识分享内容:

python参数来指定,就是运行程序是指定分享内容,脚本才能够正常运行,否则报错



这里用的是sys模块中的argv方法来取到指定参数,并存入csv文件中

3、抽取日期:

本来用的是time模块中的 time.strftime("%Y-%m-%d")方式,发现并不完美,只有抽取的日期,没有讲解的时期,所以后来改为datetime模块

today = datetime.date.today()

4、分享日期:

基于抽取日期,也给员工分享准备的时间,一周后(7天后)进行分享

week_day = today + datetime.timedelta(days=7)

效果展示:



这里有一些注意的点:

1、每次写入数据时可能会出现空行的情况:

添加newline=""即可解决

2、数据写入可能会出现表头-数据,表头-数据这种情况

所以这里用了列表推到式,判断:如果表里有数据,则只进行写入数据;

如果表里没有数据,则写入表头,同时写入数据

with open("111.csv","a",encoding='utf-8',newline="") as f:
k = csv.writer(f, dialect="excel")
with open("111.csv", "r", encoding='utf-8', newline="") as f:
reader = csv.reader(f)
if not [row for row in reader]:
k.writerow(["姓名", "年龄", "特长"])
k.writerow(list)
else:
k.writerow(list)

网上找的原办法,我修改了一下

3、还有一个隐藏的问题,就是如果我把列表推导式放到下方进行判断,不知道为什么会为空,不知道是两次for循环的问题还是…,所以会造成上述问题,表头-数据,表头-数据。这个原因我还不知道,请各位看官解答了,哈哈

import random
import csv
import time
import datetime
import sys
#员工列表
tablePersonnel = \
[
'刘嘉源','李沁鈺','李易','李星泽','梁晴','魏子萱','魏皓阳',
'薛纪平','薛金慧','崔东','崔俊宇','闫荣轩','闫梦','纪玉秋'
] #定义读写csv文件函数
def writeCsv():
#以追加模式打开csv文件,如果没有该文件则创建
with open( 'csvTest.csv','a',newline='') as f:
header = ['姓名', '知识分享内容', '抽取日期','分享日期']#表头
writer_obj=csv.DictWriter(f,header)#创建写入对象
#以读模式打开csv文件
with open('csvTest.csv', 'r', newline='') as f:
reader_obj = csv.DictReader(f)#创建读对象
#将reader_obj生成列表推导式
gen = [i for i in reader_obj]
# print(gen)
#如果gen不为空,不写入表头字段。进行for循环,取出文件中的姓名和员工名单做判断,如果在名单中
#则从人员名单中剔除
if gen:
for list in gen:
#将取出的orderDict对象转换为字典,并取出员工姓名
user = dict(list)['姓名']
# print(user)
#从列表剔除文件中存在的员工姓名,再做随机抽取
if user in tablePersonnel:
tablePersonnel.remove(user) name = random.choice(tablePersonnel)
#date = time.strftime("%Y-%m-%d")
today = datetime.date.today()
week_day = today + datetime.timedelta(days=7)
values = [
{'姓名': name,
'知识分享内容': sys.argv[1],
'抽取日期': today,
'分享日期':week_day}]
writer_obj.writerows(values)
#如果gen为空则创建表头(字段)并写入数据
else:
name = random.choice(tablePersonnel)
# date = time.strftime("%Y-%m-%d")
today = datetime.date.today()
week_day = today + datetime.timedelta(days=7)
values = [
{'姓名': name,
'知识分享内容': sys.argv[1],
'抽取日期': today,
'分享日期':week_day}]
writer_obj.writeheader()
writer_obj.writerows(values) if __name__ == "__main__": #作为脚本执行
writeCsv()

制作一个简单的部门员工知识分享的python抽取脚本的更多相关文章

  1. PureMVC和Unity3D的UGUI制作一个简单的员工管理系统实例

    前言: 1.关于PureMVC: MVC框架在很多项目当中拥有广泛的应用,很多时候做项目前人开坑开了一半就消失了,后人为了填补各种的坑就遭殃的不得了.嘛,程序猿大家都不喜欢像文案策划一样组织文字写东西 ...

  2. TensorFlow练习13: 制作一个简单的聊天机器人

    现在很多卖货公司都使用聊天机器人充当客服人员,许多科技巨头也纷纷推出各自的聊天助手,如苹果Siri.Google Now.Amazon Alexa.微软小冰等等.前不久有一个视频比较了Google N ...

  3. 实例学习SSIS(一)--制作一个简单的ETL包

    原文:实例学习SSIS(一)--制作一个简单的ETL包 导读: 实例学习SSIS(一)--制作一个简单的ETL包 实例学习SSIS(二)--使用迭代 实例学习SSIS(三)--使用包配置 实例学习SS ...

  4. (转)Java中使用正则表达式的一个简单例子及常用正则分享

    转自:http://www.jb51.net/article/67724.htm 这篇文章主要介绍了Java中使用正则表达式的一个简单例子及常用正则分享,本文用一个验证Email的例子讲解JAVA中如 ...

  5. 手把手制作一个简单的IDEA插件(环境搭建Demo篇)

    新建IDEA插件File --> new --> Project--> Intellij PlatForm Plugin-->Next-->填好项目名OK 编写插件新建工 ...

  6. 如何使用AEditor制作一个简单的H5交互页demo

    转载自:http://www.alloyteam.com/2015/06/h5-jiao-hu-ye-bian-ji-qi-aeditor-jie-shao/ 本教程演示如何使用AEditor制作一个 ...

  7. 制作一个简单的WPF图片浏览器

    原文:制作一个简单的WPF图片浏览器 注:本例选自MSDN样例,并略有改动.先看效果: 这里实现了以下几个功能:1.  对指定文件夹下所有JPG文件进行预览2.  对选定图片进行旋转3.  对选定图片 ...

  8. 自己制作一个简单的操作系统二[CherryOS]

    自己制作一个简单的操作系统二[CherryOS] 我的上一篇博客 自己制作一个简单的操作系统一[环境搭建], 详细介绍了制作所需的前期准备工作 一. 一点说明 这个操作系统只是第一步, 仅仅是开机显示 ...

  9. htpwdScan — 一个简单的HTTP暴力破解、撞库攻击脚本

    李姐姐之前跟我们分享了子域名枚举工具subDomainBrute<subDomainsBrute — 改进渗透测试时暴力枚举子域名的python脚本>,这回带给我们htpwdScan ht ...

随机推荐

  1. HR数据分析常用的50个公式

    HR数据分析常用的50个公式 HR经常需要和数据打交道,如入职率.离职率.加班费计算等.虽然日常工作中,单个数据的计算并不麻烦,但几十上百个累计在一起,确实很容易混淆,甚至计算失误.今天小编急HR之所 ...

  2. Spring Boot系列之-profile

    Spring Boot profile用于分离不同环境的参数配置,通过spring.profile.active参数设置使用指定的profile. 在Spring Boot中应用程序配置可以使用2种格 ...

  3. mysql遇见Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre的问题

    问题出现的原因: MySQL 5.7.5及以上功能依赖检测功能.如果启用了ONLY_FULL_GROUP_BY SQL模式(默认情况下),MySQL将拒绝选择列表,HAVING条件或ORDER BY列 ...

  4. Red Team远程控制软件

    开源远程管理控制 https://github.com/malwaredllc/byob 僵尸网络生成框架 https://github.com/panda-re/lava 大规模向程序中植入恶意程序 ...

  5. SpringBoot学习笔记:单元测试

    SpringBoot学习笔记:单元测试 单元测试 单元测试(英语:Unit Testing)又称为模块测试,是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作.程序单元是应用的最小可测试部 ...

  6. 无聊的活动/缘生意转(2018 Nova OJ新年欢乐赛B题)解题报告

    题目2(下面的太抓 我重新写了个背景 其他都一样) 无聊的活动 JLZ老师不情愿的参加了古风社一年一度的活动,他实在不觉得一群学生跳舞有什么好看,更不明白坐在身后的学生为什么这么兴奋(看小姐姐),于是 ...

  7. python实践项目二:列表转字符串

    将列表各元素转换为字符串并以规定形式返回. 假定有下面这样的列表:spam = ['apples', 'bananas', 'tofu', 'cats'],将其转换成字符串:'apples, bana ...

  8. LeetCode 142. 环形链表 II(Linked List Cycle II)

    142. 环形链表 II 142. Linked List Cycle II 题目描述 给定一个链表,返回链表开始入环的第一个节点.如果链表无环,则返回 null. 为了表示给定链表中的环,我们使用整 ...

  9. 【转帖】K8S Deployment 命令

    K8S Deployment 命令 https://www.cnblogs.com/Tempted/p/7831604.html 今天学习了一下 kubectl scale deployment xx ...

  10. tp5功能模块添加与调试

    在原先完善的功能基础上添加比如导出列表为excel ,一下子把所有属性写全了,出了问题,不好查找问题在哪? 所以遇到这种问题,需要最简单的测试.比如新建一个mysql表内就放一列一行数据.减少代码量, ...