Python bottle:fileupload 对象具有模式 'rb+'。例如。 Pandas read_csv 方法,我需要模式为 'rt'

Python bottle: fileupload object has mode 'rb+'. For eg. Pandas read_csv method, I need the mode to be 'rt'

我正在将文件上传到本地 Bottle 网络服务器。如果我使用 file_selected = request.files.get('file')file_selected 将成为包含上传文件内容的临时缓冲区的文件句柄。但是,附加到此文件句柄的模式是 'rb+',它中断了几个 csv 操作。

我可以在上传的缓冲区上使用 come 命令,但不是全部。

from bottle import request
import pandas as pd
file_selected = request.files.get('file')
d = pd.read_csv(file_selected, sep="\t", header=0)  # works
# but
d = pd.read_csv(file_selected, sep="\t", header=0, skipfooter=2)  # gives error

错误:pandas.errors.ParserError:迭代器应该 return 字符串,而不是字节(您是否以文本模式打开文件?)。

关键在这里:

file_selected = request.files.get('file')

为了使用该文件,您需要将其从缓冲区中取出。 HTML 文件上传文件只是将字节发送到缓冲区。

            # Creating sample file in the network-drive
            sample_stream = request.files.get('file')
            sample_file = open(sample_filename, "w") # or possible 'wb'
            for line in sample_stream: 
                sample_file.write(line)
            sample_file.close()

现在您可以打开您的文件,所有 python 优点都将正常工作