Python-如何打开尚未写入磁盘的文件?

Python-如何打开尚未写入磁盘的文件?,python,file-io,flask,Python,File Io,Flask,在将JPG写入磁盘之前,我使用一个函数从Python中上传的JPG中剥离exif数据。我用的是烧瓶,文件是通过请求带进来的 file = request.files['file'] 剥离exif数据,然后保存它 f = open(file) image = f.read() f.close() outputimage = stripExif(image) f = ('output.jpg', 'w') f.write(outputimage) f.close() f.save(os.path

在将JPG写入磁盘之前,我使用一个函数从Python中上传的JPG中剥离exif数据。我用的是烧瓶,文件是通过请求带进来的

file = request.files['file']
剥离exif数据,然后保存它

f = open(file) 
image = f.read()
f.close()
outputimage = stripExif(image)
f = ('output.jpg', 'w')
f.write(outputimage)
f.close()
f.save(os.path.join(app.config['IMAGE_FOLDER'], filename))

Open不起作用,因为它只接受字符串作为参数,如果我尝试只设置
f=file
,它会抛出一个关于元组对象没有write属性的错误。在读取当前文件之前,如何将其传递到此函数中

试试io包,它有一个BufferedReader(),ala:


文件
是一种
文件存储
,如中所述

正如doc所说,
stream
表示此文件的数据流,通常以指向临时文件的指针的形式,并且大多数函数都是代理的

您可能可以执行以下操作:

file = request.files['file']
image = file.read()
outputimage = stripExif(image)
f = open(os.path.join(app.config['IMAGE_FOLDER'], 'output.jpg'), 'w')
f.write(outputimage)
f.close()

open()
将目标文件的路径作为参数(而不是内容)
f=open(PATH,'w')
然后
f.write(data)
然后
f.close()
创建文件,向其中写入数据并关闭它。什么是f.save()?它以前是file.save,我只是在剥离元数据后尝试将文件保存到磁盘
file.save
不存在。我认为您混淆了GUI概念和Python文件对象概念。。。我建议您阅读Python手册中的文件对象。我的问题是:
request.files['File']
的值是多少?另外:与其打开-写入-关闭,不如用open('output.jpg','wb')作为f:f.write(outputimage)注意,如果你不想惹麻烦的话,应该以二进制模式('wb')打开文件,我发现werkzeug有一个错误:“AttributeError:“file”对象没有“readable”属性。你能找出类型吗?ie:打印类型(request.files['file'])有效,谢谢。一个问题:从速度/连接性的角度来看,在文件保存之前对其执行操作(如剥离元数据)更好,还是将其保存到磁盘然后剥离它更好?这实际上取决于服务器的实现。
request.files
中的文件可能已经保存到磁盘,或者可能只是缓冲在内存中,但没有指定。我想说,在对文件进行条带化之前,没有必要先保存文件,但我没有太多的理由。
file = request.files['file']
image = file.read()
outputimage = stripExif(image)
f = open(os.path.join(app.config['IMAGE_FOLDER'], 'output.jpg'), 'w')
f.write(outputimage)
f.close()
file = request.files['file']
image = stripExif(file.read())
file.close()
filename = 'whatever' # maybe you want to use request.files['file'].filename
dest_path = os.path.join(app.config['IMAGE_FOLDER'], filename)
with open(dest_path, 'wb') as f:
    f.write(image)