2016-02-26 2 views
0

Я пытаюсь понять, как переименовать существующий текстовый файл при изменении названия текстового файла. Если я сейчас изменю заголовок, он создаст новый текстовый файл с новым заголовком. «Старый текстовый файл», который я хотел сохранить с новым именем, по-прежнему существует, но с оригинальным именем. Таким образом, я получил два файла с одним и тем же контентом.Python 2.7 bottle web

Я создаю новые статьи (текстовые файлы) через @route ('/ update /', method = 'POST') в моем «edit templet», где title = title, text = text. Скажем, после того, как я создал новую статью с именем (title) = «Key» и написал немного в этом текстовом файле. Затем, если я хочу отредактировать/изменить статью «Ключ», я нажимаю на эту статью и представляю статью в @route ('/ wiki /',) def show_article (article) :. title = article, text = text)

В этом шаблоне я могу изменить свое «Ключ» (название) на «Заблокировать». Я все еще использую ту же форму @route ('/ update /', method = 'POST'), чтобы опубликовать мои изменения. Вот в чем проблема: он создает новый текстовый файл вместо переименования статьи «Ключ» в «Заблокировать».

Как я могу изменить @route ('/ update /', method = 'POST'), чтобы понять, что я работаю с уже существующим текстовым файлом и хочу только переименовать этот файл. Я попытался использовать два разных метода = 'POST', но только метод не допускает ошибки все время.

 from bottle import route, run, template, request, static_file 
     from os import listdir 
     import sys 
     host='localhost' 

     @route('/static/<filname>') 

     def serce_static(filname): 
      return static_file(filname, root="static") 

     @route("/") 
     def list_articles(): 
      files = listdir("wiki") 
      articles = [] 

      for i in files: 
       lista = i.split('.') 
       word = lista[0] 
       lista1 = word.split('/') 
       articles.append(lista1[0]) 

      return template("index", articles=articles) 


     @route('/wiki/<article>',) 
     def show_article(article): 
      wikifile = open('wiki/' + article + '.txt', 'r') 
      text = wikifile.read() 
      wikifile.close() 

      return template('page', title = article, text = text) 


     @route('/edit/') 
     def edit_form(): 

      return template('edit') 

     @route('/update/', method='POST') 
     def update_article(): 

      title = request.forms.title 
      text = request.forms.text 
      tx = open('wiki/' + title + '.txt', 'w') 
      tx.write(text) 
      tx.close() 

      return template('thanks', title=title, text=text) 

     run(host='localhost', port=8080, debug=True, reloader=True) 
+0

вы видели мой ответ, сделал это работает? – doru

+0

Я не могу заставить его работать. Потому что я не могу захватить название текстового файла, который я хочу изменить. – derby1

+0

Это не имеет никакого смысла. Как вы планируете действовать над чем-то, если вы не знаете его имени? –

ответ

0

Вы можете использовать os.replace('old_name', 'new_name'):

import os 
... 
tx = open('wiki/' + title + '.txt', 'w') 
tx.write(text) 
os.replace(tx.name, 'name_you_want.txt') # use os.replace() 
tx.close() 
Смежные вопросы