使用pyreadstat读取内存中的SPSS文件(.sav或.zsav)

2024-09-27 07:19:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在开发Django应用程序。我知道读取SPSS文件有一些不同的方法。一种方法是使用熊猫

import pandas as pd

file_path = "./my_spss_file.sav"
df = pd.read_spss(file_path)

另一种方法是使用pyreadstat

import pyreadstat
df, meta = pyreadstat.read_sav('./my_spss_file.sav')

如上所示,与pandas不同,使用pyreadstat可以获得元信息,例如变量和标签值。所以,这就是我正在使用的。这个pyreadstat的问题是我不能将它用于内存读取。从浏览器上传spss文件后,每次我都必须将其上传到一个目录,然后使用pyreadstat模块从那里读取该文件

def upload_file(request):
    result = None
    # Get the context from the request.
    context = RequestContext(request)
    if request.is_ajax():
        if "POST" == request.method:
            global my_df
            global _explore
            global base_dir
            file = request.FILES['file']
            file_name = file.name
            base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
            try:
                my_df = None
                # Determine the type of the file and get the dataframe
                if file_name.endswith('.csv'):
                    my_df = pd.read_csv(file, header=0)
                elif file_name.endswith('.xlsx') or file_name.endswith('.xls'):
                    my_df = pd.read_excel(file, header=0)
                elif file_name.endswith('.sav') or file_name.endswith('.zsav'):
                    handle_uploaded_file(file, str(file))
                    file_path = os.path.join(base_dir, "upload\\") + file_name
                    my_df = util.read_spss_file(file_path)

def read_spss_file(f_name):
    df, meta = pyreadstat.read_sav(f_name, apply_value_formats=True)
    return df

def handle_uploaded_file(file, filename):
    upload_dir = os.path.join(base_dir, "upload\\") #base_dir + 'upload/'
    if not os.path.exists(upload_dir):
        os.mkdir(upload_dir)

    with open(upload_dir + filename, 'wb+') as destination:
        for chunk in file.chunks():
            destination.write(chunk)

我不想将上传的spss文件写入磁盘。所以,我想知道是否有一种方法可以使用pyreadstat模块读取inmemory spss文件


Tags: 文件thepathnamedfreadosrequest
1条回答
网友
1楼 · 发布于 2024-09-27 07:19:56

不幸的是,目前这是不可能的

Pyreadstat依赖于C库Readstat,它目前绝对需要磁盘上的文件

有人提出了这个问题

Pandas read_spss也在后台使用pyreadstat,因此这两种方法实际上是相同的

相关问题 更多 >

    热门问题