POST上传的excel(xls)文件,如何直接读进pandas,避免写入到磁盘?
csv文件我可以这样写代码,已测试没有问题。
但是execl文件用TextIOWrapper好像不行。
if form.validate_on_submit():
if request.method == 'POST':
for file in request.files.getlist("files"):
if file:
csvfile = io.TextIOWrapper(file.stream, encoding='gbk')
reader = csv.reader(csvfile)
for line in reader:
temp = line[0]
然而我pandas读取excel的时候:
form = ShopDataForm()
if form.validate_on_submit():
if request.method == 'POST':
file = request.files['files']
execlfile = io.TextIOWrapper(file.stream)
taxidata_from_excel = pd.read_excel(execlfile, header=0, encoding='gbk')
报错:
builtins.UnicodeDecodeError
UnicodeDecodeError: 'gbk' codec can't decode byte 0xba in position 22: illegal multibyte sequence
编码这里我换了gbk,utf-8都不行
但是当我尝试着本地读取的话,简单一句就能成功读取了。。
temp=pd.read_excel("1.xls")
所以到底是哪里出了问题?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
.xls
不是文本文件, 设置encoding应该是无效的。老老实实等文件下载完,再 pd.read_excel()
read_excel(
io
)io
可以是 url、ftp 之类的资源定位符。如果你知道
.xls
的位置,可以直接打开。试一下,直接 pd.read_excel(file) 或 (file.stream)
我觉得 stringIO 可以解决你的问题 。用它来先保存下file.stream 内容。在传给pd。