提问人:putta 提问时间:10/30/2023 更新时间:10/30/2023 访问量:54
如何在python中创建受密码保护的csv或ZIP存档
How to create password protected csv or ZIP archive in python
问:
async def get_report(id):
try:
data = await collection.find({"_id": ObjectId(id)}).to_list(None)
if data:
df1 = pd.DataFrame(data)
directory = Path("/")
file_name = "abcd.csv"
file_path = directory / file_name
df1.to_csv(file_path, index=False)
password = "1234"
zip_file_path = directory / (file_name + ".zip")
with zipfile.ZipFile(zip_file_path, 'w', zipfile.ZIP_DEFLATED) as zf:
zf.setpassword(password.encode('utf-8'))
zf.write(file_path, arcname=file_name)
response = FileResponse(zip_file_path, media_type='application/zip', filename=file_name+".zip")
return response
#json_data = {'file':str(zip_file_path)}
#response = requests.post(url,json=json_data)
except Exception as e:
print(e)
这是我的代码,在这里我尝试创建数据帧的 csv 并通过电子邮件发送文件(代码在这里不存在,但 csv 正在邮件中发送(其工作))文件正在下载 csv 和 zip。但是这里没有密码保护(返回响应),是否可以做,如果是的话,我在这里缺少什么。
答:
2赞
Elvin Jafarov
10/30/2023
#1
内置的zipfile模块不支持写入密码加密文件(仅读取),参见[docs][1],您可以使用pyminizip:
pip install pyminizip
import pyminizip
async def get_report(id):
try:
data = await collection.find({"_id": ObjectId(id)}).to_list(None)
if data:
df1 = pd.DataFrame(data)
directory = Path("/")
file_name = "abcd.csv"
file_path = directory / file_name
df1.to_csv(file_path, index=False)# remove if you dont want to save .csv file as well
password = "1234"
zip_file_path = directory / (file_name. + ".zip")
pyminizip.compress(file_path, None, zip_file_path, password, 0)
response = FileResponse(zip_file_path, media_type='application/zip', filename=file_name+".zip")
return response
#json_data = {'file':str(zip_file_path)}
#response = requests.post(url,json=json_data)
except Exception as e:
print(e)
[1]: https://docs.python.org/3/library/zipfile.html#zipfile.ZipFile.setpassword
评论
0赞
putta
10/30/2023
有关导入,请参阅此链接: pypi.org/project/pyminizip pyminizip.compress(str(file_path), “”, str(zip_file_path), password, 0)
0赞
putta
10/30/2023
如果我们需要 Excel 而不是 zip/csv,如何实现
评论
setpassword