制作一个简单的部门员工知识分享的python抽取脚本
需求:
基于公司的文化和公司部门间以及员工之间的工作需求状态,或者想要了解某一些技能、专业方面的知识需求。促进并提高员工们的技能认知和技术水平。
详细代码如下:
先说一下存入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抽取脚本的更多相关文章
- PureMVC和Unity3D的UGUI制作一个简单的员工管理系统实例
前言: 1.关于PureMVC: MVC框架在很多项目当中拥有广泛的应用,很多时候做项目前人开坑开了一半就消失了,后人为了填补各种的坑就遭殃的不得了.嘛,程序猿大家都不喜欢像文案策划一样组织文字写东西 ...
- TensorFlow练习13: 制作一个简单的聊天机器人
现在很多卖货公司都使用聊天机器人充当客服人员,许多科技巨头也纷纷推出各自的聊天助手,如苹果Siri.Google Now.Amazon Alexa.微软小冰等等.前不久有一个视频比较了Google N ...
- 实例学习SSIS(一)--制作一个简单的ETL包
原文:实例学习SSIS(一)--制作一个简单的ETL包 导读: 实例学习SSIS(一)--制作一个简单的ETL包 实例学习SSIS(二)--使用迭代 实例学习SSIS(三)--使用包配置 实例学习SS ...
- (转)Java中使用正则表达式的一个简单例子及常用正则分享
转自:http://www.jb51.net/article/67724.htm 这篇文章主要介绍了Java中使用正则表达式的一个简单例子及常用正则分享,本文用一个验证Email的例子讲解JAVA中如 ...
- 手把手制作一个简单的IDEA插件(环境搭建Demo篇)
新建IDEA插件File --> new --> Project--> Intellij PlatForm Plugin-->Next-->填好项目名OK 编写插件新建工 ...
- 如何使用AEditor制作一个简单的H5交互页demo
转载自:http://www.alloyteam.com/2015/06/h5-jiao-hu-ye-bian-ji-qi-aeditor-jie-shao/ 本教程演示如何使用AEditor制作一个 ...
- 制作一个简单的WPF图片浏览器
原文:制作一个简单的WPF图片浏览器 注:本例选自MSDN样例,并略有改动.先看效果: 这里实现了以下几个功能:1. 对指定文件夹下所有JPG文件进行预览2. 对选定图片进行旋转3. 对选定图片 ...
- 自己制作一个简单的操作系统二[CherryOS]
自己制作一个简单的操作系统二[CherryOS] 我的上一篇博客 自己制作一个简单的操作系统一[环境搭建], 详细介绍了制作所需的前期准备工作 一. 一点说明 这个操作系统只是第一步, 仅仅是开机显示 ...
- htpwdScan — 一个简单的HTTP暴力破解、撞库攻击脚本
李姐姐之前跟我们分享了子域名枚举工具subDomainBrute<subDomainsBrute — 改进渗透测试时暴力枚举子域名的python脚本>,这回带给我们htpwdScan ht ...
随机推荐
- Newtonsoft.Json 方法使用()
JSON.NET1.3.0,旧版本的json.net,使用Newtonsoft.Json.JavaScriptConvert.DeserializeObject类进行转换 如果是新版本的json.ne ...
- mongodb 内嵌数组查询问题: 如何限定返回与条件匹配的数组
原文地址:https://segmentfault.com/q/1010000002943721
- 以Redis为例介绍YCSB的使用
环境 首先确保安装了jdk和maven,我个人使用的是openjdk11和maven3,由于本人非常建议使用python版本的ycsb,建议安装python.ubuntu 18.04下可以使用apt安 ...
- 非常好用的JavaScript 工具库--lodash
一.什么是lodash? lodash库是一个具有一致接口.模块化.高性能等特性的 JavaScript 工具库. lodash是一个javascript库,也是Node JS的常用模块,它内部封装了 ...
- 按键板的原理和实现--基于GPIO的按键板
上篇介绍简单的ADC实现,需要IC提供一个额外的ADC.但出于IC成本的考虑,无法提供这个的ADC时,但提供了多个额外的GPIO(General Purpose Input Output:双向的:可以 ...
- 使用Nethunter(Kali黑客手机)wifite破解无线密码
简介: NetHunter是一个基于Kali Linux为Nexus设备构建的Android渗透测试平台,其中包括一些特殊和独特的功能. NetHunter支持无线802.11注入,一键MANA AP ...
- 虚拟机中Linux环境下使用Squid部署代理缓存服务(及透明传输)
小知识: 正确的使用Squid服务程序部署代理缓存服务可以有效提升访问静态资源的效率,降低原服务器的负载. 不仅如此,还为读者们添加了对指定IP地址.网页关键词.网址与文件后缀的ACL访问限制功能的实 ...
- Span复习
Span复习 using System; namespace Span复习 { class Program { static void Main(string[] args) { //Console. ...
- SpringBoot中使用@Scheduled创建定时任务
SpringBoot中使用@Scheduled创建定时任务 定时任务一般会在很多项目中都会用到,我们往往会间隔性的的去完成某些特定任务来减少服务器和数据库的压力.比较常见的就是金融服务系统推送回调,一 ...
- 【工具】导入导出 Excel
文章目录 前言 当前支持的功能 方法api 配置 如何使用(Demo) 实现思路(该工具类可正确的一个大前提) 后记 前言 之前写的项目中,有个需求,需要导出导入Excel表格: 本来很简单的一件事, ...