Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 找到XLRD不支持的格式_Python_Django_Django Models_Xlrd - Fatal编程技术网

Python 找到XLRD不支持的格式

Python 找到XLRD不支持的格式,python,django,django-models,xlrd,Python,Django,Django Models,Xlrd,在WINDOWS上使用XLRD的0.9.2版和python 2.7 我正在创建一个临时文件,然后使用XLRD读取该文件 data = self.excel_file path = default_storage.save('temp/temp.xls', ContentFile(data.read())) tmp_file = os.path.join(settings.MEDIA_ROOT, path) workbook = xlrd.open_workbook(tmp_file) 只要我尝

在WINDOWS上使用XLRD的0.9.2版和python 2.7

我正在创建一个临时文件,然后使用XLRD读取该文件

data = self.excel_file
path = default_storage.save('temp/temp.xls', ContentFile(data.read()))
tmp_file = os.path.join(settings.MEDIA_ROOT, path)
workbook = xlrd.open_workbook(tmp_file)
只要我尝试打开XLS文件,它就会返回错误

xlrd.biffh.XLRDError: Unsupported format found '\xd0\xcf\x11\xe0\xa1\xb1\x00\x00'
所以我猜上面的文件没有正确保存。不确定该怎么办,因为在文件字段中使用django admin上传文件时,这是有效的

在python中将这样的文件保存到django模型会产生上述问题:

from django.core.files import File

p = Foo()
p.excel_file.save(file_name, File(data))
p.save()

在我看来,这可能是一个unicode问题。我猜字符串中有非ASCII字符?将字符串保存到xls时,请尝试使用
.encode(“utf-8”)

编辑:这是一个猜测,经过@Harry的进一步调查,看起来这不是正确的解决方案


编辑2:如果文件无法按下面讨论的那样用Excel打开,那么数据本身可能就是问题所在。

在我看来,这可能是一个unicode问题。我猜字符串中有非ASCII字符?将字符串保存到xls时,请尝试使用
.encode(“utf-8”)

编辑:这是一个猜测,经过@Harry的进一步调查,看起来这不是正确的解决方案


编辑2:如果文件无法按下面讨论的那样用Excel打开,那么数据本身可能就是问题所在。

是的-值得一试。这就是:UnicodeDecodeError:“ascii”编解码器无法解码0位置的字节0xd0:序号不在范围内(128)@Harry为什么不看看tmp文件中的内容?嗯,似乎我不能用excel打开它。。一定是这样then@Harry-是的,看起来错误的来源不同。我编辑我的答案以反映这种可能性。是的-值得一试。这就是:UnicodeDecodeError:“ascii”编解码器无法解码位置0处的字节0xd0:序号不在范围内(128)@Harry为什么不看看tmp文件中有什么?嗯,似乎我无法用excel打开它。。一定是这样then@Harry-是的,看起来错误的来源不同。我编辑我的答案以反映这种可能性。