Python - запись и чтение из временного файла
Я пытаюсь создать временный файл, который я пишу в некоторых строках из другого файла, а затем создаю некоторые объекты из данных. Я не уверен, как найти и открыть временный файл, чтобы я мог его прочитать. Мой код:
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()
По сути, я просто хочу сделать временный документ посредника для защиты от случайной перезаписи файла.
Ответы
Ответ 1
В соответствии с 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)
Ответ 2
У вас проблема с областью; файл 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
Ответ 3
Если файл необходимо открыть во второй раз, например, прочитать другим процессом, это может вызвать проблемы в ОС Windows:
Возможность использования имени для открытия файла во второй раз, когда именованный временный файл все еще открыт, зависит от платформы (его можно использовать в 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.