如何从临时文件对象获取文件名?

How do I get the filename from a tempfile object?

我的目标是创建一个由 csv.writer 编写的临时文件,该文件将用于上传到数据库。上传完成后,我想删除文件。

这里不包括上传和删除部分,因为我还没有完全构建它,但我需要先通过这部分。

import csv, io, tempfile

filename = tempfile.NamedTemporaryFile(suffix='.csv', delete=False)

file = io.StringIO(report_downloader.DownloadReportAsString(report, skip_report_header=False, skip_column_header=False, skip_report_summary=True))
reader = csv.reader(file)

with open(filename, 'w', encoding='utf8', newline='') as f:
    writer = csv.writer(f, delimiter=',')
    for row in reader:
        writer.writerows([row])     

这样做的结果错误是:

Traceback (most recent call last):
File "aw-ad-performance-tempfile.py", line 99, in <module> get_api_report()
File "aw-ad-performance-tempfile.py", line 92, in get_api_report
with open(filename, 'w', encoding='utf8', newline='') as f:

OSError: [Errno 22] Invalid argument:'<tempfile._TemporaryFileWrapper object at 0x00000274FBED0FD0>'

我已经尝试了几种不同的方法来解决这个问题,并且我发现它需要一个字符串,其中文件名在这里:

with open(filename, 'w', encoding='utf8', newline='') as f:

是否可以使用 tempfile 模块将临时文件作为字符串引用,以便 csv.writer 识别它?如果是,这样做的语法是什么?

你走在正确的轨道上。您需要使用 tempfile.NamedTemporaryFile 对象的 .name 属性引用您的文件。请参阅文档 here.

with open(filename.name, 'w', encoding='utf8', newline='') as f:
    writer = csv.writer(f, delimiter=',')
        for row in reader:
            writer.writerows([row])