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