构想

  1. 用raw_input()获取输入,并存入一个txt文件当中
  2. 每次写入用户输入之前,先写入一行当前的日期和时间
  3. 提供一些可供用户操作的命令,比如回看、删除、搜索等

基于前两个构想,写出代码如下:

#-*-coding: utf-8-*-
import datetime
diary = raw_input('How is your day today? -->')
current_time = datetime.datetime.now()

file = open("DiaryPool.txt","a")
file.write (current_time.__format__('%c')+"\n\n")
file.write(diary+"\n")
file.close()
print (":)")

如何令其可以一直运行,等待我们的输入

  • 或是接受其它命令?
  • 怎么退出脚本?

Google的结果,有两种解决途径

  1. 比较容易理解的版本:
    text = ""
    stopword = ""
    while True:
     line = raw_input()
     if line.strip() == stopword:
         break
     text += "%s\n" % line
    print text
    
  2. 看起来更简洁的版本
    sentinel = '' # ends when this string is seen
    for line in iter(raw_input, sentinel):
     pass # do things here
    
    查了iter的文档, 但是在这种情况下,iter第一个input必须是callable object。
  • So, 加入了lambda,将这一部分变成callable,参考这里。但是具体的原理还是不理解啦~还要进一步学习:) 于是,代码修改为:
#-*-coding: utf-8-*-
import datetime
text = ""
print ('How is your day today? -->')

sentinel = 'quit()' # ends when this string is seen
for line in iter(lambda: raw_input(), sentinel):
    text += "%s\n" % line

current_time = datetime.datetime.now()

file = open("DiaryPool.txt","a")
file.write (current_time.__format__('%c')+"\n")
file.write(text+"\n\n")
file.close()
print ("-->Diary is finished. Well done: )")