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 优点都将正常工作
我正在将文件上传到本地 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 优点都将正常工作