制作一个简单的部门员工知识分享的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()
原文地址:https://www.cnblogs.com/ilovepython/p/11068855.html