如何使用 Python 获取 PickleType 数据并转换为文件夹中的 csv 文件
Posted
技术标签:
【中文标题】如何使用 Python 获取 PickleType 数据并转换为文件夹中的 csv 文件【英文标题】:How to take a PickleType data and convert to csv files in a folder using Python 【发布时间】:2022-01-15 21:07:58 【问题描述】:我正在尝试从 sqlalchemy
获取 PickleType
数据并将其转换为文件夹中的 csv 文件。
这是我的课程的片段,其中包含 PickleType
数据:
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column
from sqlalchemy.sql.sqltypes import PickleType
Base = declarative_base()
class Sales(Base):
.....
data = Column(PickleType, nullable=False, comment="Sale Data for sale")
这是我试图在PickleType
中获取该数据并将其转换为文件夹中的 CSV 文件的函数
from data import Sales
import pandas as pd
import os.path
import pickle
def _to_csv(self, sales_data : Sales):
"""
To get Sales data to output CSV files into a folder
"""
data1 = []
with open(sales_data.data, 'rb') as file:
data2 = pickle.dumps(file)
data1 = pickle.load(data2)
df = pd.DataFrame(data1)
df.to_csv(os.path.join('/Desktop/sales','/car_sales.csv'))
file.close()
【问题讨论】:
您是否有需要解决的问题,或者您是否正在寻求性能提升或并行化等改进? @Dariyoush 寻求改进,如果此功能适用于将数据设置为 csv 文件到具有性能增益的目录中将是完美的! 好的,所以你将不同的数据传递给_to_csv
函数,对吧?比如说data1,data2,...你多次调用函数来保存它们。是这样吗?
是的,这是正确的,传递不同的数据,这个函数会被多次调用以保存它们
【参考方案1】:
我不知道你的类和数据的结构,但如果你有数据,你可以将它们附加到一个列表中,并同时调用你的 _to_csv
方法为你保存它。像这样的……
from data import Sales
import pandas as pd
import os.path
import pickle
import multiprocessing as mp
import concurrent.futures
def _to_csv(self, data):
"""
To get Sales data to output CSV files into a folder
"""
data1 = []
with open(data 'rb') as file:
data2 = pickle.dumps(file)
data1 = pickle.load(data2)
df = pd.DataFrame(data1)
df.to_csv(os.path.join('/Desktop/sales',f'/data.csv'))
file.close()
# I am assuming that you have the name of the files that you wanna read and save as cvs
data_list = []
for idx in range(20):
name = f'car_salesidx'
data_list.append(name)
with concurrent.futures.ProcessPoolExecutor(max_workers=mp.cpu_count()) as executor:
executor.map(_to_csv, data_list)
或者如果你想将每个数据名称分配给它的结果,你可以这样做:
with concurrent.futures.ProcessPoolExecutor(max_workers=mp.cpu_count()) as executor:
futures =executor.submit(_to_csv, data):data for data in data_list
for future in concurrent.futures.as_completed(futures):
data = futures[future]
try:
result = future.result()
except Exception as why:
print('sth went wrong!', why)
else:
print(data, result)
【讨论】:
谢谢@Dariyoush,我想在处理file1.csv、file2.csv、file3.csv等文件时增加文件名,这看起来很棒。我的班级没有文件名。为了发生这种增量,我需要另一个循环概率? 很高兴为您提供帮助。是的,这就是我构建 data_list 的方式。你可以这样做或那样做。以上是关于如何使用 Python 获取 PickleType 数据并转换为文件夹中的 csv 文件的主要内容,如果未能解决你的问题,请参考以下文章