创建拼写检查,需要访问App Engine中的words.txt

时间:2012-02-10 05:35:03

标签: python google-app-engine

我正致力于创建一个用户可以输入文本段落的应用程序,并在段落上运行拼写检查。我通过打开文件' words.txt'在本地文档中使用python轻松地实现了这一点。其中包含我的字典。我试图找出如何打开单词列表来实现我的拼写检查。

我的第一次尝试是将它作为静态文件放在我的目录中并对文件进行提取,但我一直收到错误。

以下是我的文件:

的app.yaml:

application: *******
version: 1
runtime: python
api_version: 1

handlers:

- url: /(.*\.txt)
  mime_type: text/plain
  static_files: static/\1
  upload: static/(.*\.txt)

- url: /.*
  script: helloworld.py

摘录自 helloworld.py

import os
from google.appengine.ext.webapp import template
import cgi
import datetime
import urllib
import wsgiref.handlers
from google.appengine.api import urlfetch 

from google.appengine.ext import db
from google.appengine.api import users
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app

....

result=urlfetch.fetch(os.path.join(os.path.dirname(__file__),'words.txt'))
words=set(result.splitlines())

有什么问题?我一直收到错误。

4 个答案:

答案 0 :(得分:2)

您无法从代码中访问app.yaml中定义为静态的文件。而是删除静态映射,或在代码中包含另一个副本。然后,您可以使用以下内容访问该文件:

f = open('words.txt')
words = f.read()
f.close()

答案 1 :(得分:2)

这里有很多不同的文件访问方法。当你这样做时:

result=urlfetch.fetch(os.path.join(os.path.dirname(__file__),'words.txt'))

您为'words.txt'创建的路径将是您在与处理程序脚本相同的目录中上传的文件的正确路径,如果您尚未将其声明为static_files的一部分,尽管它出现从您的配置中,您希望路径更像:

os.path.join(os.path.dirname(__file__), 'static', 'words.txt')

但是,这里有两个问题。首先,static_files是从与处理程序不同的进程提供的,并且(可能)被加载到完全不同的服务器上。你不会有文件系统访问它们(我认为这就是你使用urlfetch的原因。)然而,你构建的路径是文件系统访问,而不是urlfetch访问。要在生产中使用urlfetch,您需要使用@brianmichelich建议的网络URL - 但是,请注意,使用开发服务器无法正常工作,开发服务器一次只能处理一个请求。

但是,如果从app.yaml中删除静态指令,则应该能够将该路径用作常规with / open块的一部分。

答案 2 :(得分:0)

您可以将本地文件放在Google App Engine上并打开它们以供阅读 如果你的文件在顶层,你需要这样的东西:

f = open('./words.txt')

您无需使用urlfetch获取文件。

答案 3 :(得分:-1)

您应该提取完全限定的网址,例如http://myapp.appspot.com/words.txt

from google.appengine.api import urlfetch, app_identity

url = 'http://%s/words.txt' % app_identity.get_default_version_hostname()
result=urlfetch.fetch(url)
words=result.content