我正在尝试创建一个临时文件,我在另一个文件的某些行中编写,然后从数据中创建一些对象。我不知道如何找到并打开临时文件,以便我可以阅读它。我的代码:
with tempfile.TemporaryFile() as tmp:
lines = open(file1).readlines()
tmp.writelines(lines[2:-1])
dependencyList = []
for line in tmp:
groupId = textwrap.dedent(line.split(':')[0])
artifactId = line.split(':')[1]
version = line.split(':')[3]
scope = str.strip(line.split(':')[4])
dependencyObject = depenObj(groupId, artifactId, version, scope)
dependencyList.append(dependencyObject)
tmp.close()
基本上我只想制作一个中间人临时文件,以防止意外覆盖文件。
答案 0 :(得分:17)
根据docs,当TemporaryFile
关闭时,文件将被删除,退出with
子句时会发生这种情况。所以......不要退出with
条款。回滚文件并在with
中完成工作。
with tempfile.TemporaryFile() as tmp:
lines = open(file1).readlines()
tmp.writelines(lines[2:-1])
tmp.seek(0)
for line in tmp:
groupId = textwrap.dedent(line.split(':')[0])
artifactId = line.split(':')[1]
version = line.split(':')[3]
scope = str.strip(line.split(':')[4])
dependencyObject = depenObj(groupId, artifactId, version, scope)
dependencyList.append(dependencyObject)
答案 1 :(得分:16)
你有范围问题;文件tmp
仅存在于创建它的with
语句的范围内。此外,如果您希望稍后在初始NamedTemporaryFile
之外访问该文件,则需要使用with
(这使操作系统能够访问该文件)。此外,我不确定您为什么要尝试附加到临时文件...因为它在您实例化之前不会存在。
试试这个:
import tempfile
tmp = tempfile.NamedTemporaryFile()
# Open the file for writing.
with open(tmp.name, 'w') as f:
f.write(stuff) # where `stuff` is, y'know... stuff to write (a string)
...
# Open the file for reading.
with open(tmp.name) as f:
for line in f:
... # more things here
答案 2 :(得分:0)
如果文件需要第二次打开,例如might cause trouble on Windows OS通过不同的过程读取:
该名称是否可用于第二次打开文件,而命名的临时文件仍处于打开状态,在不同的平台上会有所不同(在Unix上可以使用,在Windows NT或更高版本上不能使用)。
因此,安全的解决方案是改为create a temporary directory,然后在其中手动创建文件:
import os.path
import tempfile
with tempfile.TemporaryDirectory() as td:
f_name = os.path.join(td, 'test')
with open(f_name, 'w') as fh:
fh.write('<content>')
# Now the file is written and closed and can be used for reading.