2016-02-26 45 views
0

我试图找出如何当我改变了文本文件的标题命名现有的文本文件。如果我现在更改标题,它将创建一个新标题的新文本文件。我想用一个新名称保存的“旧文本文件”仍然存在,但具有原始名称。所以我有两个相同内容的文件。的Python 2.7瓶网络

我通过@route创造新的文章(文本文件)(“/更新/”,方法=“POST”)在我的“编辑模板”,其中标题=标题,文本=文本。假设我创建了一个名称为(title)=“Key”的新文章并在该文本文件中写了一点。然后,如果我想编辑/改变我的“重点”文章中,我点击该文章并提出在@route文章(“/维基/”)高清show_article(文章):.标题=文章,文=文本)

在这个模板我可以改变我的“钥匙”姓名(名称),以“锁定”。我仍然使用相同的表单@route('/ update /',method ='POST')发布我的更改。 这里的问题是,它会创建一个新的文本文件,而不是重命名的“钥匙”文章“锁定”。

我怎样才能改变@route(“/更新/”,方法=“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()