fra*_*ima 5 python xlrd python-2.7
我在使用Python 2.7.9的Debian GNU / Linux计算机上。
作为我工作的一部分,我一直在制作python脚本,以各种格式(例如Excel,Csv,Txt)读取输入,并将信息解析为更标准的文件。这不是我第一次打开或使用Excel文件。
有一个特定的文件给我带来了问题,我只是无法打开它。当我尝试使用xlrd(版本0.9.3)时,它给了我以下错误:
xlrd.open_workbook('sample.xls')
Run Code Online (Sandbox Code Playgroud)
XLRDError:不支持的格式或损坏的文件:BOF不是工作簿/工作表:op = 0x0009 vers = 0x0002 strm = 0x000a build = 0 year = 0-> BIFF21
我试图独自调查此事,在StackOverflow中找到了两个答案,但无论如何我都无法打开它。我发现的这个特定答案可能是问题所在(第二个解释),但其中不包含解决方法:https : //stackoverflow.com/a/16518707/4345659
可以将文件转换为csv / txt的工具也可以解决该问题。
我已经尝试过:
此处提供示例文件:https : //ufile.io/r4m6j
作为附带说明,我可以使用LibreOffice Calc和MS Excel打开它,因此最终可以通过这种方式将其更改为csv。问题是,我需要使用python脚本来完成所有操作。
提前致谢!
这似乎是 MS 问题。xls 文件很奇怪,也许你应该联系 xlrd 支持。
但我有一个疯狂的解决方法给你:xls2ods。它对我有用,尽管 xls2csv 不起作用(SiC!)。
因此,首先安装 catdoc:
$sudo apt-get install catdoc
Run Code Online (Sandbox Code Playgroud)
然后将您的 xls 文件转换为 ods 并使用 pyexcel_ods 或您喜欢的任何方式打开 ods。要使用 pyexcel_ods,请先使用pip install pyexcel_ods
.
import subprocess
from pyexcel_ods import get_data
file_basename = 'sample'
returncode = subprocess.call(['xls2ods', '{}.xls'.format(file_basename)])
if returnecode > 0:
# consider to use subprocess.Popen if you need more control on stderr
exit(returncode)
data = get_data('{}.ods'.format(file_basename))
print(data)
Run Code Online (Sandbox Code Playgroud)
我得到以下输出:
OrderedDict([(u'sample',
[[u'labo',
u'codfarm',
u'farmacia',
u'direccion',
u'localidad',
u'nom_medico',
u'matricula',
u'troquel',
u'producto',
u'cant_total']])])
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2429 次 |
最近记录: |