我试图在python中使用pyreadstat读取sav文件,但在某些罕见情况下,由于字符串变量具有特殊字符,我会收到UnicodeDecodeError错误。
为解决这一问题,我认为与其加载整个变量集,不如加载不具有此错误的变量。
下面是我随身携带的伪代码。这不是一个非常有效的代码,因为我使用try和except检查列表的每个项目中的错误。
# Reads only the medata to get information about the variables
df,meta = pyreadstat.read_sav('Test.sav',metadataonly=True)
list = meta.column_names # All variables are stored in list
result = []
for var in list:
print(var)
try:
df,usecols=[str(var)])
# If no error that means we can store this variable in result
result.append(var)
except:
pass
# This will finally load the sav for non error variables
df,usecols=result)
对于具有1000多个变量的sav文件,需要花费大量时间来处理。 我当时在想是否有办法使用分而治之的方法,并且可以更快地做到这一点。下面是我建议的方法,但是我在实现递归算法方面不是很好。有人可以用伪代码帮助我吗?
- 获取列表并尝试读取sav文件
- 如果没有错误,则可以将输出存储在结果中,然后我们读取sav文件
- 如果发生错误,则将列表分为两部分,然后再次运行....
- 第3步需要再次运行,直到我们有一个列表没有给出任何错误为止
使用第二种方法时,我的90%的sav文件将在第一遍本身中加载,因此我认为递归是一个好方法
您可以尝试重现sav文件here的问题