我在appengine中使用xlrd。我用烧瓶
我无法读取输入文件并继续显示相同的错误消息
代码是
def read_rows(inputfile):
rows = []
wb = xlrd.open_workbook(inputfile)
sh = wb.sheet_by_index(0)
for rownum in range(sh.nrows):
rows.append(sh.row_values(rownum))
return rows
@app.route('/process_input/',methods=['POST','GET'])
def process_input():
inputfile = request.files['file']
rows=read_rows(request.files['file'])
payload = json.dumps(dict(rows=rows))
return payload
我意识到这可能是因为没有上传并将其保存为文件。对此有任何解决方法吗?这也有助于其他许多人。感谢任何帮助,thx
更新:找到我在下面发布的解决方案。对于那些与使用xlrd混淆的人可以参考我发布的开源项目repo。关键是传递文件的内容而不是文件名
答案 0 :(得分:5)
最终找到解决方案
这是我如何做到的。我没有保存文件,而是读取文件的内容并让xlrd读取它
def read_rows(inputfile):
rows = []
wb = xlrd.open_workbook(file_contents=inputfile.read())
sh = wb.sheet_by_index(0)
for rownum in range(sh.nrows):
rows.append(sh.row_values(rownum))
return rows
工作得很好,并将excel文件转换为JSON格式。如果要输出json,只需使用json.dumps()。
完整的代码示例可以在https://github.com/cjhendrix/HXLator/blob/master/gae/main.py找到,它具有xlrd的完整实现以及如何处理数据。
指针的Thx
答案 1 :(得分:3)
使用:
wb = xlrd.open_workbook(file_contents=inputfile)
您调用open_workbook
的方式需要传递的是文件名,而不是包装实际文件的Flask FileStorage
对象。
答案 2 :(得分:0)
从你的追溯判断。
File "/Users/fauzanerichemmerling/Desktop/GAEHxl/gae/lib/xlrd/init.py", line 941, in biff2_8_load
f = open(filename, open_mode)
您可以尝试将此行更改为:
f = filename