从文本文件读入列表,然后写回Python / CGI列表

时间:2012-12-13 06:37:44

标签: python html cgi

我试图基本上从keywords.txt获取数据并将其放入列表中。然后,如果用户输入的表单中的数据不在列表中,则会将其写入文件,并根据列表中是否存在而将用户带到某个网页。我基本上希望文件只是一行中只有一个单词,但首先我只是想让它工作。

我无法理解用户输入数据的变量是否有意义。

#!/usr/bin/env python
import cgi
import cgitb
cgitb.enable()

form = cgi.FieldStorage()
keyword = form.getvalue('keyword')


print 'Content-type: text/html\r\n\r'
print '<html>'
print '<h1>Please enter a keyword of your choice</h1>'
print '<form action="results.cgi" method="post">'
print 'Keyword: <input type="text" name="keyword">  <br />'
print '<input type="submit" value="Submit" />'
print '</form>'
print '</html>'

keylist = []
f = open('keywords.txt', 'rw')
for each in f.readline():
    keylist.append(each)

if keyword in keylist:
    print 'Location: %s' % # my url

else:
    f.write(keyword)
    f.close()
    print 'Location: %s' % # my second url

2 个答案:

答案 0 :(得分:0)

for each in f.readline()

仅使用第一行,即f.readline的结果。因此,每个变量都是第一行的每个字符。

如果您使用

for each in f.read().split()
你应该得到你想要的东西。 f.read()一次读取整个文件,split()拆分换行符(以及所有类型的空格)

除此之外,您应该使用rw + mode打开文件,否则会出现IOError。

答案 1 :(得分:0)

与您的问题没有直接关系,但是,我看到,您只关闭文件,如果关键字 键列表中

也许你想搬家

  

f.close()

低于其他条件。但是,这只是一个想法。

是的,我会选择 Hyperboreus 的答案:

  

对于f.readlines()中的行: #where行可以很容易地成为你的'每个'