需求:

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

详细代码如下:

先说一下存入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. Python - Django - ORM 多对多表结构的三种方式

    多对多的三种方式: ORM 自动创建第三张表 自己创建第三张表, 利用外键分别关联作者和书,关联查询比较麻烦,因为没办法使用 ORM 提供的便利方法 自己创建第三张表,使用 ORM 的 ManyToM ...

  2. 【 argo 和 kubectl 】

    argo submit --watch xxx.yaml [ --kubeconfig xxx.conf  --namespace xxx ] argo list [ --kubeconfig xxx ...

  3. [转]Ubuntu 上创建常用磁盘阵列

    链接地址:https://www.jianshu.com/p/9a458510593a

  4. 【linux学习笔记三】链接命令

    链接命令:ln link =============华丽的分割线============= ln又有软链接和硬链接 //硬链接特征(不建议创建硬链接) 1.拥有相同的i节点和存储block块,可以看做 ...

  5. transform-transition-animation(1)

    网布就是我们的屏幕,x轴沿屏幕平行的水平方向,y轴沿屏幕平行的垂直方向,z轴沿与屏幕垂直方向. rotateX(angle), rotateY(angle), rotateZ(angle), rota ...

  6. 关于启动kylin报Failed to find metadata store by url: kylin_metadata@hbase的问题解决

    一.出问题的原因 昨天因为项目需要,要将cloudera集群改成高可用,没想到失败了,当时因为冲动手动删了几个hdfs实例的原因,导致退不到原来的状态,折腾了一天,最后终于退回了非HA的集群,但是hd ...

  7. SpringCloud用Zookeeper做服务注册与发现中心代码实现

    一:Zookeeper用的是3.5.5版本,SpringBoot用的是2.1.6版本,SpringCloud用的是Greenwich.SR2版本,JDK用的是1.8: 服务提供者product-ser ...

  8. Python 发送微信小程序的模板消息

    在小程序的开发过程中,会存在模板消息的发送,具体文档见 这里,模板消息的发送是和语言无关的,这里将简要写一下怎么用 Python 给用户发送模板消息.     通过文档可以知道,发送的时候,需要使用小 ...

  9. TZOJ5703: C++实验:学生成绩类的实现

    #include<iostream> #include<string> #include<stdio.h> using namespace std; class s ...

  10. on duplicate key mysql插入更新

    insert into `test` (`job_id`, `user_name`, `total_time`) values ('12345', 'zhangsan', '10') on dupli ...