需求:
基于公司的文化和公司部门间以及员工之间的工作需求状态,或者想要了解某一些技能、专业方面的知识需求。促进并提高员工们的技能认知和技术水平。
详细代码如下:
先说一下存入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()
-