POST上传的excel(xls)文件,如何直接读进pandas,避免写入到磁盘?

发布于 2022-09-03 18:56:14 字数 1042 浏览 10 评论 0

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

醉酒的小男人 2022-09-10 18:56:14

.xls不是文本文件, 设置encoding应该是无效的。
老老实实等文件下载完,再 pd.read_excel()


read_excel(io)
io可以是 url、ftp 之类的资源定位符。
如果你知道.xls的位置,可以直接打开。

>>>help(pd.read_excel)
Help on function read_excel in module pandas.io.excel:

read_excel(io, …………)
    Read an Excel table into a pandas DataFrame
    
    Parameters
    ----------
    io : string, path object (pathlib.Path or py._path.local.LocalPath),
        file-like object, pandas ExcelFile, or xlrd workbook.
        The string could be a URL. Valid URL schemes include http, ftp, s3,
        and file. For file URLs, a host is expected. For instance, a local
        file could be file://localhost/path/to/workbook.xlsx

试一下,直接 pd.read_excel(file) 或 (file.stream)

file = request.files['files']
taxidata_from_excel = pd.read_excel(file) # (file.stream)
心清如水 2022-09-10 18:56:14

我觉得 stringIO 可以解决你的问题 。用它来先保存下file.stream 内容。在传给pd。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文