zoukankan      html  css  js  c++  java
  • 制作一个简单的部门员工知识分享的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()
    
  • 相关阅读:
    Tomcat安装和配置过程
    Java集合框架概述
    Hash表的原理
    Java 浅拷贝和深拷贝的理解和实现方式
    Nginx 配置上传文件大小
    将博客搬至CSDN
    vscode中设置vue代码片段
    底部标签栏获取token失败
    Eacharts K线报错问题
    阿里字体图标库在项目中引用
  • 原文地址:https://www.cnblogs.com/ilovepython/p/11068855.html
Copyright © 2011-2022 走看看