import os
import shutil
import pandas as pd
from typing import Dict
import pyzipper
class DataSaver:
def __init__(self, directory: str):
"""初始化DataSaver类。
Args:
directory: 数据保存的目录。
"""
self.directory = directory
def save_dataframes(self, dataframes: Dict[str, pd.DataFrame]):
"""将多份数据保存到指定目录下,得到多份文件。
Args:
dataframes: 待保存的DataFrame字典,键为文件名,值为DataFrame数据。
Returns:
保存的文件列表。
"""
if not os.path.exists(self.directory):
os.makedirs(self.directory)
self.dataframes = dataframes
file_list = []
for file_name, df in dataframes.items():
file_path = os.path.join(self.directory, file_name)
if file_path.endswith(".csv"):
df.to_csv(file_path, index=False)
elif file_path.endswith(".xlsx"):
df.to_excel(file_path, index=False)
else:
raise ValueError("不支持的文件类型")
file_list.append(file_path)
return file_list
def zip_directory(self, zip_filename='data.zip', password=None):
"""
将目录中的所有文件压缩为一个zip文件,可选择是否进行加密。
Args:
zip_filename (str): zip文件的文件名
password (str or bytes): 加密密码,默认不加密
"""
# 压缩目录下所有文件
zip_path = os.path.join(self.directory, zip_filename)
flist = []
for root, dirs, files in os.walk(self.directory):
for file in files:
if file in self.dataframes.keys():
file_path = os.path.join(root, file)
flist.append((file_path, os.path.relpath(file_path, self.directory)))
with pyzipper.AESZipFile(zip_path, 'w',
compression=pyzipper.ZIP_LZMA,
encryption=pyzipper.WZ_AES if password else None) as zf:
if password:
if isinstance(password, str):
# 密码需要转bytes类型
password = password.encode()
zf.setpassword(password)
for ob in flist:
file_path = ob[0]
rel_file_path = ob[1]
zf.write(file_path, arcname=rel_file_path)
def delete_files_except_zip(self):
"""删除目录下除了zip文件以外的本次被打包文件。"""
for file_name in self.dataframes.keys():
file_path = os.path.join(self.directory, file_name)
os.remove(file_path)
# 初始化DataSaver
saver = DataSaver("D:/新建文件夹/data")
# 保存数据
df1 = pd.DataFrame({"A": [1, 2, 3], "B": [4, 5, 6]})
df2 = pd.DataFrame({"A": [7, 8, 9], "B": [10, 11, 12]})
dataframes = {"file1.csv": df1}
file_list = saver.save_dataframes(dataframes)
# 打包文件
saver.zip_directory('train.zip', '123456')
# 删除非zip文件
saver.delete_files_except_zip()
python pyzipper
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 前言 职场中一贯有“金三银四”、“金九银十”的说法。尤其是3、4月刚过完年后,很多企业的员工会选择离职,大量空缺职...
- 《Python3.5从零开始学》 《Python数据分析基础》 《Python爬虫开发与项目实战》 《Python...
- 人们问爱因斯坦为何能在1905年提出那么多改变人类认识世界的理论,他谦虚地回答道: “并不是我很聪明,只是我和问题...