问题描述
我需要创建两个文件并压缩它们(所有临时文件)。所以返回后,就没有文件了。
我尝试将文件放入临时目录。我希望它会在返回后将目录和文件一起删除。但我收到一个错误。
总而言之,我需要将文件返回给客户端。无需填满我服务器的存储空间。
这是代码
import zipfile
import tempfile
from utils.logging import logger
import shutil
from pandas_gbq import read_gbq
with tempfile.TemporaryDirectory() as dir:
rawData_csv = rawData.to_csv(f"{client}_rawData.csv",index_label=False)
dataScore_csv = dataScore.to_csv(f"{client}_dataScore.csv",index_label=False)
shutil.move(f"./{client}_rawData.csv",dir)
shutil.move(f"./{client}_dataScore.csv",dir)
destinationFile = f"{client}.zip"
password = ""
compression_level = 5
# with tempfile.TemporaryDirectory() as tdir:
try:
dir_path = dir # holds the directory where script is located
os.chdir(dir_path) # Changes to directory where script is located
fp = os.listdir(dir_path) # file pointer
directory_size = len(os.listdir(dir_path))
zip1 = zipfile.ZipFile(f'{client}.zip','w')
for i in range(directory_size):
zip1.write(fp[i],compress_type=zipfile.ZIP_DEFLATED)
# logger.info(zip1.filename)
logger.info(os.path.dirname(os.path.abspath(zip1.filename)))
logger.info(dir + "\\")
logger.info(os.listdir(dir+"\\"))
return FileResponse(
# path=tdir + "\\" + destinationFile,path=dir,filename=f'{client}.zip'
)
except Exception as e:
logger.exception(e)
错误如下:
ERROR: Exception in ASGI application
Traceback (most recent call last):
File "C:\Users\korol\PycharmProjects\API-Integration\venv\lib\site-packages\uvicorn\protocols\http\h11_impl.py",line 396,in run_asgi
result = await app(self.scope,self.receive,self.send)
File "C:\Users\korol\PycharmProjects\API-Integration\venv\lib\site-packages\uvicorn\middleware\proxy_headers.py",line 45,in __call__
return await self.app(scope,receive,send)
File "C:\Users\korol\PycharmProjects\API-Integration\venv\lib\site-packages\fastapi\applications.py",line 199,in __call__
await super().__call__(scope,send)
File "C:\Users\korol\PycharmProjects\API-Integration\venv\lib\site-packages\starlette\applications.py",line 112,in __call__
await self.middleware_stack(scope,send)
File "C:\Users\korol\PycharmProjects\API-Integration\venv\lib\site-packages\starlette\middleware\errors.py",line 181,in __call__
raise exc from None
File "C:\Users\korol\PycharmProjects\API-Integration\venv\lib\site-packages\starlette\middleware\errors.py",line 159,in __call__
await self.app(scope,_send)
File "C:\Users\korol\PycharmProjects\API-Integration\venv\lib\site-packages\starlette\exceptions.py",line 82,in __call__
raise exc from None
File "C:\Users\korol\PycharmProjects\API-Integration\venv\lib\site-packages\starlette\exceptions.py",line 71,sender)
File "C:\Users\korol\PycharmProjects\API-Integration\venv\lib\site-packages\starlette\routing.py",line 580,in __call__
await route.handle(scope,send)
File "C:\Users\korol\PycharmProjects\API-Integration\venv\lib\site-packages\starlette\routing.py",line 241,in handle
await self.app(scope,line 52,in app
response = await func(request)
File "C:\Users\korol\PycharmProjects\API-Integration\venv\lib\site-packages\fastapi\routing.py",line 201,in app
raw_response = await run_endpoint_function(
File "C:\Users\korol\PycharmProjects\API-Integration\venv\lib\site-packages\fastapi\routing.py",line 148,in run_endpoint_function
return await dependant.call(**values)
File "C:\Users\korol\PycharmProjects\API-Integration\app.py",line 142,in read_item
return await bigTable(client_name)
File "C:\Users\korol\PycharmProjects\API-Integration\app.py",line 91,in bigTable
return FileResponse(
File "C:\Users\korol\AppData\Local\Programs\Python\Python39\lib\tempfile.py",line 826,in __exit__
self.cleanup()
File "C:\Users\korol\AppData\Local\Programs\Python\Python39\lib\tempfile.py",line 830,in cleanup
self._rmtree(self.name)
File "C:\Users\korol\AppData\Local\Programs\Python\Python39\lib\tempfile.py",line 812,in _rmtree
_shutil.rmtree(name,onerror=onerror)
File "C:\Users\korol\AppData\Local\Programs\Python\Python39\lib\shutil.py",line 740,in rmtree
return _rmtree_unsafe(path,onerror)
File "C:\Users\korol\AppData\Local\Programs\Python\Python39\lib\shutil.py",line 618,in _rmtree_unsafe
onerror(os.unlink,fullname,sys.exc_info())
File "C:\Users\korol\AppData\Local\Programs\Python\Python39\lib\tempfile.py",line 804,in onerror
cls._rmtree(path)
File "C:\Users\korol\AppData\Local\Programs\Python\Python39\lib\tempfile.py",line 599,in _rmtree_unsafe
onerror(os.scandir,path,sys.exc_info())
File "C:\Users\korol\AppData\Local\Programs\Python\Python39\lib\shutil.py",line 596,in _rmtree_unsafe
with os.scandir(path) as scandir_it:
NotADirectoryError: [WinError 267] The directory name is invalid: 'C:\\Users\\korol\\AppData\\Local\\Temp\\tmp4pf2dew8tempdir\\Babtooma.zip'
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)