2015-11-13 5 views
-3

У меня есть файл output.txt, который я хочу записать из нескольких функций вокруг кода, некоторые из которых являются рекурсивными. Проблема в том, что каждый раз, когда я пишу, мне нужно снова и снова открывать файл, а затем все, что я написал ранее, удаляется. Я совершенно уверен, что это решение, не нашли его на все вопросы здесь до ..Запись в файл с использованием Python

def CutTable(Table, index_to_cut, atts, previousSv, allOfPrevSv): 
    print ('here we have:') 
    print atts 
    print index_to_cut 
    print Table[2] 
    tableColumn=0 
    beenHere = False 
    for key in atts: 
     with open("output.txt", "w") as f: 
      f.write(key) 

и из другой функции:

def EntForAttribute(possibles,yesArr): 
svs = dict() 
for key in possibles: 
    svs[key]=(yesArr[key]/possibles[key]) 
for key in possibles: 
     with open("output.txt", "w") as f: 
      f.write(key) 

Все выходные у меня есть последний написано в одной из функций ..

+0

открыть файл в режиме добавления. 'open (" output.txt "," a ")' – Avantol13

+0

передать 'f' или сделать его глобальным – Skaperen

+0

Когда я делаю что-то вроде этого, изначально требующего одной записи, тогда много добавлений, я обычно делаю что-то вроде этого : 'with open ('file.txt', 'w', если не os.path.isfile ('file.txt') else 'a') как f:' – Tgsmith61591

ответ

4

Вы должны изменить второй флаг при открытии файла:

  • w только для записи (существующий файл с таким же именем будет стерта)
  • a открывает файл для добавления

Ваш код, то должно быть:

with open("output.txt", "a") as f: 
0

Короткий ответ. измените 'w' в дескрипторе файла на 'a' для добавления.

with open("test.txt", "a") as myfile: 
    myfile.write("appended text") 

Это уже ответ в этой теме. How do you append to a file?

2

Каждый раз, когда вы входите и выходите из блока with open..., вы снова открываете файл. Как упоминают другие ответы, вы каждый раз переписываете файл. Кроме перехода к Append, это, вероятно, хорошая идея, чтобы поменять местами with и for петли так, вы только открыть файл один раз для каждого набора записей:

with open("output.txt", "a") as f: 
    for key in atts: 
     f.write(key) 
Смежные вопросы