別のファイルからいくつかの行に書き込む一時ファイルを作成してから、データからいくつかのオブジェクトを作成しようとしています。一時ファイルを見つけて開く方法がわからないので、読むことができます。私のコード:
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()
基本的に、偶然ファイルを上書きしないように、仲介者の一時的なドキュメントを作成したいだけです。
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)
スコープの問題があります。ファイルtmp
は、それを作成するwith
ステートメントのスコープ内にのみ存在します。さらに、後で最初のNamedTemporaryFile
の外部でファイルにアクセスする場合は、with
を使用する必要があります(これにより、OSがファイルにアクセスできるようになります)。また、なぜ一時ファイルに追加しようとしているのかわかりません...インスタンス化する前に存在しなかったからです。
これを試して:
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
ファイルをもう一度開く必要がある場合、たとえばこれを別のプロセスで読み取ります Windows OSで問題が発生する可能性があります :
名前を使用してファイルを再度開くことができるかどうか、名前付き一時ファイルがまだ開いている間は、プラットフォームによって異なります(UNIXでは使用できますが、Windows NT以降では使用できません)。
したがって、安全な解決策は、代わりに 一時ディレクトリを作成 にしてから、手動でファイルを作成することです:
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.