Python-запись и чтение из временного файла

Я пытаюсь создать временный файл, который я пишу несколько строк из другого файла, а затем сделать некоторые объекты из данных. Я не уверен, как найти и открыть файл temp, чтобы я мог его прочитать. Мой код:

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()

по сути, я просто хочу сделать посредник временный документ, для защиты от случайной перезаписи файла.

2 ответов


на 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 (это дает ОС возможность доступа к файлу). Кроме того, я не уверен, почему вы пытаетесь добавить во временный файл... поскольку он не существовал до того, как вы его создали.

попробуйте это:

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