制作一个简单的部门员工知识分享的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()
所思及所学
学而不思则罔,思而不学则殆!