需求:

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

详细代码如下:

先说一下存入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. vue-cli3使用vue-router 使用动态路由,在刷新页面时报错

    刚发现的一个问题,在使用vue-cli3创建项目之后,使用动=动态路由,demo: { path: '/aa/:id', name: 'aa', component: aa }, 编程式路由: thi ...

  2. 【ARTS】01_47_左耳听风-201900930~201901006

    ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...

  3. 【嵌入式硬件Esp32】Ubuntu 1804下ESP32交叉编译环境搭建

    一.ESP32概述EPS32是乐鑫最新推出的集成2.4GWi-Fi和蓝牙双模的单芯片方案,采用台积电(TSMC)超低功耗的40nm工艺,拥有最佳的功耗性能.射频性能.稳定性.通用性和可靠性,适用于多种 ...

  4. 捕捉AVPlayerViewController 系统原生工具栏的出现、隐藏事件

    需求前提 1. app内轻量级的视频播放功能,故不希望引入“过度开发.过度封装”的第三方控件组,使用原生的AVPlayerViewController 2. 工具栏有新增控件需求,如下载按钮 等 3. ...

  5. Use Hexo to Build My Gitee Blog

      之前有自己建站托管自己的博客系统, 后来因为流量实在太少, 服务器又要每个月出钱, 然后就把她关了, 然是拥有自己的网站的心一直没有退去啊, 然后之前有接触到别人用GitHub托管静态网页的玩法, ...

  6. [bzoj5483][Usaco2018 Dec]Balance Beam_凸包_概率期望

    bzoj5483 Usaco2018Dec Balance Beam 题目链接:https://lydsy.com/JudgeOnline/problem.php?id=5483 数据范围:略. 题解 ...

  7. go创建模块化项目

    比如我要创建一个xxx-system,里面可能有多个子模块,步骤如下: 1.mkdir xxx-system 2.cd xxx-system 3.在xxx-system目录下创建一系列的service ...

  8. lombok的@Accessors注解

    @AllArgsConstructor @Data @NoArgsConstructor @Accessors(chain = true) @EqualsAndHashCode public clas ...

  9. 剑指offer44:翻转单词顺序列

    1 题目描述 牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上.同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思.例如,“stude ...

  10. Django开发常用方法及面试题

    目录 1.对Django的认识? 2.Django .Flask.Tornado的对比 3.什么是wsgi,uwsgi,uWSGI? 4. django请求的生命周期? 5. 简述什么是FBV和CBV ...