python 生成csv 并压缩成zip 上传阿里 oss

       
 

import zipfile, csv, os

import oss2

   
   
  def zip_ya(startdir, file_news):
  # startdir = "./media" # 要压缩的文件夹路径
  # file_news = "MMC_" + str(datetime.now()) + ".zip" # 压缩后文件夹的名字
  z = zipfile.ZipFile(startdir + file_news, 'w', zipfile.ZIP_DEFLATED) # 参数一:文件夹名
  for dirpath, dirnames, filenames in os.walk(startdir):
  fpath = dirpath.replace(startdir, '') # 这一句很重要,不replace的话,就从根目录开始复制
  fpath = fpath and fpath + os.sep or '' # 这句话理解我也点郁闷,实现当前文件夹以及包含的所有文件的压缩
  for filename in filenames:
  z.write(os.path.join(dirpath, filename), fpath + filename)
  print u'压缩成功'
   
   
  # import pandas as pd
   
  @csrf_exempt
  def to_excel(request):
  if request.method == 'POST':
  json_data = json.loads(request.body)
  else:
  return HttpResponseBadRequest('Bad Request')
   
  if "order_ids" in json_data:
  id_list = json_data["order_ids"]
  else:
  return JsonResponse({"result": 1, "message": "ids is required"})
   
  for order in id_list:
  temps = IotTemp.objects.filter(order_id=order).order_by('time') \
  .values("time", "temperature").distinct()
  _order = IotOrder.objects.filter(id=order).first()
  if _order:
  try:
  sub = str(_order.number).split("_")
  file_name = sub[0] + "_" + _order.mac + "_" + sub[1] + "_" + sub[2] + ".csv"
   
  with open(os.path.join(sys.path[0], "iot", "media", file_name), 'wb') as csvfile:
  writer = csv.writer(csvfile, dialect='excel')
  writer.writerow(["ZenMeasureID:", _order.mac, "Shipment No.:", _order.number])
   
  writer.writerow(["Date", "Time", "Temperature(C)"])
   
  for i in temps:
  tem_list = [i["time"].strftime("%Y-%m-%d"), i["time"].strftime("%H:%M:%S"), i["temperature"]]
  writer.writerow(tem_list)
  del tem_list[:]
  except:
  return JsonResponse({"result": 2, "message": "order wrong"})
  else:
  return JsonResponse({"result": 2, "message": "order not exits"})
   
  startdir = os.path.join(sys.path[0], "iot", "media") # 要压缩的文件夹路径
  file_news = "ZenMeasureIoT_" + datetime.now().strftime("%Y-%m-%d-%H-%M-%S") + ".zip"
  zip_ya(startdir, file_news)
   
  # user_sts_key() 连接 上传oss
  AccessKeyID = ""
  AccessKeySecret = ""
  auth = oss2.Auth(AccessKeyID, AccessKeySecret)
  bucket = oss2.Bucket(auth, 'http://oss-cn-beijing.aliyuncs.com', 'iot-server')
  with open(startdir + file_news, "rb") as fileobj:
  result = bucket.put_object('records/' + file_news, fileobj)
  print result.status
  if int(result.status) == 200:
  # 删除
  del_file(startdir)
  os.remove(startdir + file_news)
   
  data = {
  "url": "http://" + 'iot-server' + ".oss-cn-beijing.aliyuncs.com/" + "records/%s" % (file_news)
  }
   
  return JsonResponse({"result": 0, "message": "success", "data": data})
  else:
  return JsonResponse({"result": 1, "message": "failed"})
   
   
   
  def del_file(path):
  # 删除目录下文件
  ls = os.listdir(path)
  for i in ls:
  c_path = os.path.join(path, i)
  if os.path.isdir(c_path):
  del_file(c_path)
  else:
  os.remove(c_path)


oss2 文档   https://help.aliyun.com/document_detail/32030.html

猜你喜欢

转载自blog.csdn.net/weixin_40907382/article/details/80228159