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

1 投票
3 回答
2064 浏览
提问于 2025-04-17 20:19

我正在使用一个脚本来去掉上传的JPG图片中的exif数据,然后再把它们保存到磁盘上。我使用的是Flask框架,文件是通过请求传入的。

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设置成这样,就会报错,说元组对象没有写入属性。我该如何在读取文件之前把当前文件传递给这个函数呢?

3 个回答

0

在编程中,有时候我们需要让程序在特定的条件下执行某些操作。比如说,当某个变量的值达到一定的标准时,我们就希望程序能够做出反应。这种情况通常会用到“条件语句”。

条件语句就像是给程序设定了一些规则,只有当这些规则被满足时,程序才会执行相应的代码。比如,如果你想让程序在用户输入的数字大于10时显示一条消息,你就可以使用条件语句来实现这个功能。

简单来说,条件语句帮助程序判断情况,并根据判断的结果来决定下一步该做什么。这样一来,程序就能根据不同的输入做出不同的反应,变得更加灵活和智能。

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)
1

试试io这个包,它里面有一个叫BufferedReader()的东西,使用起来很方便:

import io

f = io.BufferedReader(request.files['file'])
...
1

file 是一个 FileStorage,具体内容可以在这个链接找到:http://werkzeug.pocoo.org/docs/datastructures/#werkzeug.datastructures.FileStorage

根据文档的说明,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()

撰写回答