import os
import shutil
import pandas as pd
from typing import Dict
import pyzipper
class DataSaver:
def __init__(self, directory: str):
"""初始化DataSaver類(lèi)。
Args:
directory: 數(shù)據(jù)保存的目錄。
"""
self.directory = directory
def save_dataframes(self, dataframes: Dict[str, pd.DataFrame]):
"""將多份數(shù)據(jù)保存到指定目錄下,得到多份文件。
Args:
dataframes: 待保存的DataFrame字典,鍵為文件名,值為DataFrame數(shù)據(jù)。
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("不支持的文件類(lèi)型")
file_list.append(file_path)
return file_list
def zip_directory(self, zip_filename='data.zip', password=None):
"""
將目錄中的所有文件壓縮為一個(gè)zip文件,可選擇是否進(jìn)行加密。
Args:
zip_filename (str): zip文件的文件名
password (str or bytes): 加密密碼,默認(rèn)不加密
"""
# 壓縮目錄下所有文件
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):
# 密碼需要轉(zhuǎn)bytes類(lèi)型
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")
# 保存數(shù)據(jù)
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
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- 前言 職場(chǎng)中一貫有“金三銀四”、“金九銀十”的說(shuō)法。尤其是3、4月剛過(guò)完年后,很多企業(yè)的員工會(huì)選擇離職,大量空缺職...
- 《Python3.5從零開(kāi)始學(xué)》 《Python數(shù)據(jù)分析基礎(chǔ)》 《Python爬蟲(chóng)開(kāi)發(fā)與項(xiàng)目實(shí)戰(zhàn)》 《Python...
- 人們問(wèn)愛(ài)因斯坦為何能在1905年提出那么多改變?nèi)祟?lèi)認(rèn)識(shí)世界的理論,他謙虛地回答道: “并不是我很聰明,只是我和問(wèn)題...
- 七律 赴重慶市榮昌區(qū)萬(wàn)靈鎮(zhèn)參加藍(lán)氏文化研討交流會(huì)以記 “天下藍(lán)氏一家人” (...
- AsyncDisplayKit AsyncDisplayKit 是 Facebook 開(kāi)源的一個(gè)用于保持 iOS ...