• 第一阶段大作业 文件上传格式


    用户可以自己定义文件上传的格式

    @app.route('/import_data', methods=['POST', 'GET'])
    def import_data():
        #用户
        user_id=session['user_id']
        #设置flag以确定是否写入成功
        flag=0;
        #返回码含义:0上传失败,1上传成功,2上传类型不符,但是还会上传,传到test_data,3文件名重复已覆盖,4文件名重复以追加5填写格式
        #获取文件
        the_file = request.files.get("file")
        # 判断文件类型
        file_type=the_file.filename.split(".")[1]
        file_name=the_file.filename.split(".")[0]
        file_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        file_data = fileroot.find_filedata_filename(file_name)
        #判断格式是否设置
        if(china_row_0==english_row_0==unit_row_0==0):#判断文件格式是否填写
            return jsonify({"code": 5, "msg": "", "data": ""})
        else:#填写后根据文件类型上传
            #使用全局变量
            china_row_flag=china_row_0
            english_row_flag =  english_row_0
            unit_row_flag = unit_row_0
            type_flag=type_0
            flag_came=0#判断文件是否重复
            if(fileroot.find_filedata_filename(file_name)==()):
                flag_came=0
            else:
                flag_came=1
            print("文件上传配置:")
            print(china_row_flag,english_row_flag,unit_row_flag,type_flag)
            if(file_type=="csv" or file_type=="txt"):#1.保存文件2.写入文件状态表3.导入数据库4.修改状态
                # 保存文件到指定路径
                the_file.save("score_table/" + the_file.filename)
                file_size=os.path.getsize("score_table/"+the_file.filename)
                # 记录文件基本信息
                if(flag_came==0):
                    fileroot.file_root(file_name,file_time,file_type,""+hum_convert(file_size),user_id)
                    fileroot.file_update_state(file_name,"已上传")
                print("文件类型:"+file_type+",文件大小:"+""+hum_convert(file_size)+",上传时间:"+file_time+",文件名:"+file_name+",上传用户:"+user_id)
                #将文件存入数据库
                flag=connectsql.read_csv(the_file.filename,china_row_flag,english_row_flag,unit_row_flag,type_flag)#将文件存入数据库、
                #修改状态
                fileroot.file_update_state(file_name,  "已导入数据库")
            #excel_example文件夹xlsx,xls
            elif(file_type=="xlsx" or file_type=="xls"):
                # 保存文件到指定路径
                the_file.save("excel_example/" + the_file.filename)
                file_size=os.path.getsize("excel_example/"+the_file.filename)
                # 记录文件基本信息
                if (flag_came == 0):
                    fileroot.file_root(file_name,file_time,file_type,""+hum_convert(file_size),user_id)#记录文件基本信息
                    fileroot.file_update_state(file_name,  "已上传")
                print("文件类型:" + file_type + ",文件大小:" +""+hum_convert(file_size)+ ",上传时间:" + file_time + ",文件名:" + file_name+",上传用户:"+user_id)
                # 将文件存入数据库
                flag = connectsql.read_example(the_file.filename,china_row_flag,english_row_flag,unit_row_flag,type_flag)
                # 修改状态
                fileroot.file_update_state(file_name,  "已导入数据库")
            #word_data文件夹docx,doc
            elif(file_type=="docx" or file_type=="doc"):
                # 保存文件到指定路径
                the_file.save("word_data/" + the_file.filename)
                file_size=os.path.getsize("word_data/"+the_file.filename)
                # 记录文件基本信息
                fileroot.file_root(file_name,file_time,file_type,""+hum_convert(file_size),user_id)#记录文件基本信息
                fileroot.file_update_state(file_name,  "已上传")
                print("文件类型:" + file_type + ",文件大小:" +""+hum_convert(file_size)+ ",上传时间:" + file_time + ",文件名:" + file_name+",上传用户:"+user_id)
            else:
                # 保存文件到指定路径
                the_file.save("test_data/" + the_file.filename)
                file_size=os.path.getsize("test_data/"+the_file.filename)
                # 记录文件基本信息
                fileroot.file_root(file_name,file_time,file_type,""+hum_convert(file_size),user_id)#记录文件基本信息
                fileroot.file_update_state(file_name, "已上传")
                print("文件类型:" + file_type + ",文件大小:" +""+hum_convert(file_size)+ ",上传时间:" + file_time + ",文件名:" + file_name)
                return jsonify({"code": 2, "msg": "", "data": ""})
            if(flag==1):
                print("导入成功")
                if(flag_came==0):
                    return jsonify({"code": 1, "msg": "", "data": ""})
                else:
                    print("相同文件上传")
                    print(fileroot.find_filedata_filename(file_name))
                    if (type_0 == "0"):
                        return jsonify({"code": 3, "msg": "", "data": ""})
                    else:
                        return jsonify({"code": 4, "msg": "", "data": ""})
            else:
                print("导入失败")
                return jsonify({"code": -1, "msg": "", "data": ""})
    #读取样表生成数据字典type_flag 1 追加,2 覆盖
    def read_example(path,china_row,english_row,unit_row,type_flag):
        flag=1
        conn, cursor = get_conn_mysql()
        #将excel转换为csv文件
        data = pd.read_excel('excel_example/'+path, 'Sheet1')
        data.fillna('', inplace=True)
        print(data)
        csv_name = path.split(".")[0]
        # data.to_csv("excel_data/"+csv_name+'.csv', encoding='utf-8')
        # data_csv=pd.read_csv("excel_data/"+csv_name+".csv")
        # 编写表创建语句(字段类型就设为string)
        # 表名
        table_name = path.split(".")[0]
        ######################################################
        #获取数据三种情况各自为keys
        if(china_row=="1"):
            key_china = data.keys()
            key_0 = data.values.tolist()[(int)(english_row)-2]
            key_unit=data.values.tolist()[(int)(unit_row)-2]
        if(english_row=="1"):
            key_china = data.values.tolist()[(int)(china_row)-2]
            key_0 = data.keys()
            key_unit=data.values.tolist()[(int)(unit_row)-2]
        if(unit_row=="1"):
            key_china = data.values.tolist()[(int)(china_row)-2]
            key_0 = data.values.tolist()[(int)(english_row)-2]
            key_unit=data.keys()
        key=""
        for i in key_0:
            key=key+","+i
        key=key[1:]
        if (type_flag=="0"):
            delete_sql = "drop table " + csv_name
            try:
                cursor.execute(delete_sql)
            except:
                traceback.print_exc()
                flag = 0
                print("表删除失败")
        #建表及插入数据
        sql = "CREATE TABLE IF NOT EXISTS " + csv_name + " ("
        # 循环加入key值
        j=0
        for i in key_0:
            sql = sql + i + " VARCHAR(45) NOT NULL DEFAULT '#' comment '"+key_china[j]+","+key_unit[j]+"',"
            j=j+1;
        creat_sql = sql[0:-1] + ") ENGINE = InnoDB DEFAULT CHARACTER SET = utf8 COLLATE = utf8_bin;"
        print(creat_sql)
        # 获取%s
        s = ','.join(['%s' for _ in range(len(data.columns))])
        # 获取values
        values=[]
        for i in data.values.tolist()[2:]:
            values.append(i)
        print(values)
        # 组装insert语句
        insert_sql = 'insert into {}({}) values({})'.format(table_name, key, s)
        print(insert_sql)
        # print(key_china)#中文字段名
        # print(key_unit)#中文单位
        # print(key)#英文字段名
        # print(values)#数据
        #创建表
        try:
            cursor.execute(creat_sql)
        except:
            traceback.print_exc()
            flag=0
            print("表创建失败")
        # 插入数据
        try:
            for i in values:
                cursor.execute(insert_sql, i)
                print(insert_sql)
                print(i)
            conn.commit()
        except:
            traceback.print_exc()
            flag=0
            print("写入错误")
        close_conn_mysql(cursor, conn)
        return flag
  • 相关阅读:
    第六天学习:Python数据类型(二)
    第五天学习:python数据类型(一)
    第四天学习:运算符
    第一天学习:python的安装及helloworld
    第二十五天学习:mysql(二)
    第二十四天学习:mysql(一)
    第二十三天学习:正则(2)
    第二十二天学习:正则
    第二十一天学习:模块(三)json
    第二十天学习:模块(二)
  • 原文地址:https://www.cnblogs.com/fengchuiguobanxia/p/15551082.html
Copyright © 2020-2023  润新知