2017-02-23 13 views
0

Я пытаюсь сделать простую дневную программу для практики. Хотите добавить строки, когда я пишу дневник. Дневник будет держать получить вход прежде, чем получает 'Готово' или 'закончить' в строкеpython добавление текста между существующими строками в txt_file

contents[0] Diary_file 

contents[1] 'empty' 

contents[2] 'Start line' 

contents[3] '----------------------------' 

contents[4] Diary No.1 **<- first diary starts from here** 

contents[5] "I had a good day 
... 

=============================== 

(for counting logic) 

diary counts      
0 

КОД

def writing(): 
content = (raw_input("> ")) 
return content 

def put_between(word): 
    with open("D_diary.txt", 'r') as read_file: # before start, get last diary 
     contents = read_file.readlines()  # get contents in list 
     for i in contents: 
      if i == 'finish' or i == 'Finish': #get the last diary finish line 
       finish_line = i     #to get next starting point 
      else: 
       finish_line = 2     #for starting the first diary 
     count = contents[-1]     #getting the diary count number 
     print count        #for creating 'Diary No.%d' %count 

    **contents.insert(finish_line+2, word)  #THIS IS THE ACTUAL PROBLEM 
    in_contents = []       #TRYING TO START WRITING FROM 
    with open("D_diary", "w") as write_file: # 
     for i in contents: 
      in_contents += '\n'.join(contents) #ERROR PART 
      write_file.write(in_contents)** 

def writing_logic(): 
    one_weather = raw_input("Weather : ")       
    print "Write your Day! -Type 'finish' or 'Finish' to stop\n" 
    while True: 
     word = writing()      #func (just raw_input) 
     if word == 'finish' or word == 'Finish': 
      break         #finish getting text 
     else: 
      put_between(word)      #goes up to func 

Ошибка:

*TypeError: sequence item 4: expected string, NoneType found

ответ

0

В вашей функции put_between вы устанавливаете finish_line на номер i, а затем на выполнение finish_line+2. Но переменная i используется в for i in contents, что означает иногда (finish_line = i) строку текста, а иногда (finish_line = 2) целое число.

Вы, вероятно, следует использовать метод .index() для поиска слова finish, так как ваш код указывает на то, что это единственное слово в строке:

for text in ('Finish', 'finish'): 
    try: 
     finish_line = contents.index(text) 
     break 
    except ValueError: 
     pass 
else: 
    finish_line = 2 

Вы тянущего count из текста, но не преобразования это целое число. Вам нужно будет использовать count = int(...), чтобы получить целое число, так что вы можете сделать count += 1 позже, чтобы увеличить его.

Вы, вероятно, может получить выход написанный на присоединение новой строки:

outfile.write('\n'.join(contents)) 

или

print('\n'.join(contents), file=outfile) 
+0

Получение текста хорошо сейчас. По-прежнему писать текстовый файл не работал, я попробую. Благодаря! – Gomtting

0

Похоже, ваш метод writing() является возвращение None

Не могли бы вы также отправить код этому методу?

+0

да, я тоже забыл поставить возвращение на метод набора текста. Thaanks! – Gomtting

Смежные вопросы