flask 文件的上傳下載和excel操做


文件的下載

from flask import send_from_directoryhtml

@excel_bp.route('/get_attachment/<path:filename>')
def get_attachment(filename):
    return send_from_directory(app.config['UPLOAD_FOLDER'],filename,as_attachment=True)


文件的上傳

(1)html中前端

<input class="form-control" type="文件名" name="file" value="請上傳excel文件">

(2)後端獲取,保存python

file = request.files.get('文件名') # 獲取文件

filename = file.filename  # 獲取文件名

file.save(os.path.join(FILE_DIR,filename)) # 保存文件

(3)固然 要對文件名,文件類型進行判斷;存儲路徑也要進行判斷flask

可使用werkzeug中的 secure_filename後端

判斷文件類型數據結構

ALLOWED_EXTENSIONS = ['xls', 'xlsx']

def allowe_file(filename):
    '''
    限制上傳的文件格式
    :param filename:
    :return:
    '''
    return '.' in filename and filename.rsplit('.',1)[1] in ALLOWED_EXTENSIONS

修改文件名app

import os
import datetime,uuid

def change_filename(filename):
    '''
    修改文件名稱
    :param filename:
    :return:
    '''
    fileinfo = os.path.splitext(filename)
    filename = datetime.datetime.now().strftime("%Y%m%d%H%M%S")+str(uuid.uuid4().hex)+fileinfo[-1]
    return filename

判斷儲存路徑ui

if not os.path.exists(FILE_DIR):
    os.makedirs(FILE_DIR)


python的excel操做


經過xlrd讀文件

安裝:pip install xlrdexcel

經過 xlrd 打開excel,組裝數據code

import xlrd

def get_data(filename,method='r'):
    '''
    改變數據結構 -- 方便前端顯示
    :param filename:  文件名
    :param method:  按照 列或者 行 返回數據
    '''
    data = xlrd.open_workbook(filename)
    table= data.sheets()[0]
    nrows = table.nrows  # 行數
    ncols = table.ncols  # 列數
    if method == 'r':
        row_list = [ table.row_values(i) for i in range(0,nrows)]   # 全部行的數據
        return row_list
    elif method == 'c':
        col_list = [ table.col_values(i) for i in range(0,ncols)]    # 全部列的數據
        return col_list

前端顯示

< thead >
          < tr >
              {% for title in datalist[0] %}
                 < th >{ title }< / th >
              { % endfor % }
          < /tr >
    < / thead >
      < tbody >
          { % for row in datalist[1:] % }
              < tr >
                   { % for item in row % }
                      <td>{ { item } }</td>
                  { % endfor % }
              < /tr >
         { % enfor % }
      < / tbody >
  < / table >

經過xlwt寫文件

相關文章
相關標籤/搜索