我一直在开发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文件
不幸的是,目前这是不可能的
Pyreadstat依赖于C库Readstat,它目前绝对需要磁盘上的文件
有人提出了这个问题
Pandas read_spss也在后台使用pyreadstat,因此这两种方法实际上是相同的
相关问题 更多 >
编程相关推荐