如何从临时文件对象获取文件名?
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])
我的目标是创建一个由 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])