如何从tempfile对象获取文件名?

时间:2018-02-06 17:40:07

标签: python csv temporary-files

我的目标是创建一个由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识别它?如果是这样的语法是什么?

1 个答案:

答案 0 :(得分:0)

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

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