xiaomingtt 发表于 2023-3-15 16:18

帮忙分析一下python的bug怎么解决

# -*- coding: utf-8 -*-
import os
import requests
import os.path as op
from flask import Flask, request,send_from_directory
import pandas as pd
import time


app = Flask(__name__)

@app.route('/api/send')
def uploaded_file():
    print(len(request.args))
    name = request.args.get('name')
    pt = request.args.get('pt')
    p =os.getcwd() + "/" + pt
    print(p)
    return send_from_directory(p,name)

@app.route('/api/get')
def testGet():
    name = request.args.get('name')
    print(name)
    a = downloadfile(name)
    return a
   

def downloadfile(url):
    houzhui = op.splitext(url)[-1]
    fname =op.splitext(op.split(url))
    lujing = op.join(os.getcwd(), fname)
    print(lujing)
    if not(op.exists(lujing)):
      os.mkdir(lujing, 777 );
    file_to_save = op.join(lujing, str(int(round(time.time() * 1000))) + houzhui)
    print(file_to_save)


    response = requests.get(url, stream=True)
    print(response.headers["Content-Length"])
    with open(file_to_save, "wb") as f:
      for chunk in response.iter_content(chunk_size=1024):
            if chunk:
                f.write(chunk)
      print("\n结束下载")
      fsize = op.getsize(file_to_save)
      print(fsize)
      time.sleep(10)
      ok = chaifenExcel(file_to_save)
      if ok == 'ok':
            return 'ok'
      else:
            return 'no'

def chaifenExcel(excelfile):
    print(excelfile)
    savept = op.split(excelfile) + "/"
    data = pd.read_excel(excelfile)
    rows = data.shape
    department_list = []
       
    for i in range(rows):
      temp = data["主管所"]
      if temp not in department_list:
            department_list.append(temp)
       
    for department in department_list:
      new_df = data == department]
      new_df.to_excel(savept + str(department) + ".xlsx", sheet_name=department, index=False)



if __name__ == '__main__':
    app.run(port=5001,debug=True,use_reloader=False)


Win7x86系统,Python3.8.10,Flask==2.2.3,pandas==1.5.3,requests==2.27.1,运行代码后会下载一个Excel文件,
程序运行到data = pd.read_excel(excelfile)就会报错zipfile. BadZipFile: File is not a zip file,
将程序中的chaifenExcel函数单独作为一个PY文件处理下载的Excel文件,就可以正常运行。
完全相同的代码环境,Win10x64也可以正常运行。

Nettos 发表于 2023-3-15 16:18

可以尝试增加下载文件的等待时间,或者检查文件下载是否完整,以确保能够正确读取Excel文件
调用chaifenExcel()函数之前增加睡眠时间,或者在调用pd.read_excel()函数前检查文件下载是否完成。
试试吧

不知何处归 发表于 2023-3-15 16:24

这份代码中,最后一个函数chaifenExcel没有返回值,将导致downloadfile函数的最后一行执行时出现错误。您可以在chaifenExcel函数的最后添加return 'ok'语句,表示函数运行成功。非本人回答。。

xiaomingtt 发表于 2023-3-15 16:30

不知何处归 发表于 2023-3-15 16:24
这份代码中,最后一个函数chaifenExcel没有返回值,将导致downloadfile函数的最后一行执行时出现错误。您可 ...

已经试过了,开始用Try,后来直接return ok都不行。

xiaomingtt 发表于 2023-3-15 16:32

Nettos 发表于 2023-3-15 16:26
可以尝试增加下载文件的等待时间,或者检查文件下载是否完整,以确保能够正确读取Excel文件
调用chaifenEx ...

已经加了10秒的等待,而且打开前打印了文件大小,没问题的。相同的文件,把代码中的chaifenExcel函数拿出来单独运行也没问题。

ygkdyx 发表于 2023-3-15 16:38

来自ChatGPT的回复:
根据错误信息 "zipfile. BadZipFile: File is not a zip file",你的程序似乎在尝试读取一个非 zip 格式的文件,并且这个文件名以 ".zip" 结尾。

这可能是由于在程序中使用了错误的文件名或者是在下载 Excel 文件时出现了问题,导致下载的 Excel 文件并非真正的 Excel 文件而是一个 zip 文件。

你可以检查一下下载的 Excel 文件的文件名和文件类型,并确保文件名以 ".xlsx" 结尾,以确保程序可以正确地读取它。

另外,你还可以在程序中添加一些错误处理代码来捕获和处理这些异常情况,以便更好地调试程序。例如,在下载文件时,可以检查下载的文件是否为 Excel 文件,如果不是,则返回错误信息。

xiaomingtt 发表于 2023-3-15 16:41

ygkdyx 发表于 2023-3-15 16:38
来自ChatGPT的回复:
根据错误信息 "zipfile. BadZipFile: File is not a zip file",你的程序似乎在尝试 ...

哈哈,我也试过,代码给他,找出8处可能存在BUG的地方,但不包括我这个,这个BUG他没能给出有效处理意见。

taryll 发表于 2023-3-15 16:41

出现错误的直接原因可能是,打开一个之前没有close关闭的Excel文件。

980041382 发表于 2023-3-15 16:48

https://files.catbox.moe/xtcc33.png 使用gpt4进行回答

xiaomingtt 发表于 2023-3-15 16:56

taryll 发表于 2023-3-15 16:41
出现错误的直接原因可能是,打开一个之前没有close关闭的Excel文件。

代码中有下载函数,要处理的也是代码刚下载回来的Excel
页: [1] 2
查看完整版本: 帮忙分析一下python的bug怎么解决