文章内容

2024/8/9 2:58:34,作 者: 黄兵

Python file.save() 与 open() + write() 对比

最近在使用 Flask 上传文件,并将文件保存,下面是具体代码:

file = request.files['file']
filename = secure_filename(file.filename)
file_path = os.path.join(current_app.static_folder, 'temp')
os.makedirs(file_path, exist_ok=True)
file.save(os.path.join(file_path, filename))
return jsonify({'message': 'File uploaded successfully', 'filename': filename}), 200

但是也可以这样写:

file = request.files['file']
filename = secure_filename(file.filename)
file_path = os.path.join(current_app.static_folder, 'temp')
os.makedirs(file_path, exist_ok=True)
# 获取上传文件
file_data = file.read()

# 写入文件内容
with open(os.path.join(file_path, filename), 'wb') as f:
    f.write(file_data)
return jsonify({'message': 'File uploaded successfully', 'filename': filename}), 200

两种方法都可以实现保存文件的方法,但是两者有什么区别呢?

file.save()open() + write() 都可以用于将文件保存到指定目录,但它们有一些不同之处:

1. file.save() 方法

  • 方法简介: file.save() 是 Flask 的 werkzeug 库提供的一个方法,用于直接将上传的文件保存到指定路径。
  • 优点:
    • 简单: 直接调用 file.save() 方法即可保存文件,代码简洁。
    • 自动处理: 自动处理文件流、文件大小等,适用于普通文件上传场景。
    • 文件流: 文件数据流直接从请求中读取,适用于大文件上传时避免一次性读取全部文件内容到内存中。

示例代码:

file.save(os.path.join(file_path, filename))

2. open() + write() 方法

  • 方法简介: 使用 Python 的内置 open() 函数结合 write() 方法,手动读取文件数据流并写入到目标路径。
  • 优点:
    • 灵活性: 可以对文件数据进行额外处理,如读取文件内容、修改文件数据等。
    • 控制: 允许更细粒度地控制文件写入过程,如处理文件数据流的方式。

示例代码:

file_data = file.read()  # 读取文件内容
with open(os.path.join(file_path, filename), 'wb') as f:
    f.write(file_data)  # 写入文件内容

比较和区别

  1. 文件处理方式:

    • file.save() 方法会自动处理上传的文件流并保存,不需要显式读取文件内容。
    • open() + write() 方法需要先手动读取文件内容,然后写入到目标路径。
  2. 内存管理:

    • file.save() 方法直接将文件流写入目标路径,适合大文件上传,因为它不需要将整个文件内容加载到内存中。
    • open() + write() 方法需要将文件内容读入内存,这可能会对内存使用产生影响,特别是对于大文件。
  3. 异常处理:

    • file.save() 方法的异常处理相对简单,通常只需处理文件保存过程中可能出现的错误。
    • open() + write() 方法提供了更大的灵活性,可以在读取和写入文件时添加额外的错误处理逻辑。
  4. 用途:

    • 使用 file.save() 方法时,通常用于处理简单的文件上传场景。
    • 使用 open() + write() 方法时,通常在需要对文件内容进行操作或需要更多控制的场景下使用。

总结

  • 简单文件保存: 对于大多数简单的文件上传场景,file.save() 是更方便和直接的选择。
  • 自定义处理: 如果需要对文件内容进行处理或者在写入时有特定需求,使用 open() + write() 提供了更大的灵活性。

如果你只需要保存上传的文件,file.save() 通常是更简洁和高效的选择。


其它相关推荐:

1、jQuery File Upload Unexpected string at new Function

2、解决Writing a Python list of lists to a csv file

3、Python 写文件示例

4、Python 获取父目录路径

5、Python 创建文件代码片段

分享到:

发表评论

评论列表