如何使用pandas read_pickle从qrc资源文件中读取包含pandas数据帧的泡菜文件?

时间:2019-04-01 12:46:14

标签: python pandas pyqt pyqt5 qresource

我在PyQt5中创建了简单的UI应用程序。我想将所有资源文件都放在qrc资源中。

我正在使用pickle数据结构存储以前创建的DataFrame。在我的应用程序中,我正在阅读与熊猫一起腌制的咸菜。当我尝试从qrc_resources(使用pyrcc5创建)python模块执行此操作时,出现错误。

我使用了与该答案相同的方法:

Create a pandas dataframe from a qrc resource file

资源文件:

 pytesseract.pytesseract.tesseract_cmd = r'C:/Program Files (x86)/Tesseract-OCR/tesseract'

Python代码:

<!DOCTYPE RCC><RCC version="1.0">
<qresource>
    <file alias="AA_data.pkl">resources/AA_data.pkl</file>
</qresource>
</RCC>

import bisect, io
import pandas as pd

from PyQt5.QtGui import QImage
from PyQt5.QtCore import QFile, QIODevice
import qrc_resources       

file = QFile(':/AA_data.pkl')
if file.open(QIODevice.ReadOnly):
    f = io.BytesIO(file.readAll().data())
    AA_df = pd.read_pickle(f)


如果我对excel文件执行类似操作,则可以使用。但是用pickle文件格式我得到一个错误。我对数据序列化不是很熟悉,也无法弄清楚我在做什么错。

任何帮助都会得到补偿。

最诚挚的问候

1 个答案:

答案 0 :(得分:1)

您必须使用“无”进行压缩:

import io
import pandas as pd
from PyQt5.QtCore import QFile, QIODevice
import qrc_resources

file = QFile(':/AA_data.pkl')
if file.open(QIODevice.ReadOnly):
    f = io.BytesIO(file.readAll().data())
    AA_df = pd.read_pickle(f, compression=None)
    print(AA_df)