从文本文件web2py读取 [英] Reading from a text file web2py
问题描述
我在使用web2py时遇到问题.我在modules文件夹中有一个名为defVals.txt的文本文件.我尝试使用open("defVals.txt")
(在与defVals.txt相同的控制器中的模块中)从中读取内容,但出现错误:
I'm having an issue with web2py. I have a text file called defVals.txt that's in the modules folder. I try to read from it, using open("defVals.txt")
(in a Module in the same director as defVals.txt), but I get the error:
Traceback (most recent call last):
File "/home/jordan/web2py/gluon/restricted.py", line 212, in restricted
exec ccode in environment
File "/home/jordan/web2py/applications/randommotif/controllers/default.py", line 67, in <module>
File "/home/jordan/web2py/gluon/globals.py", line 188, in <lambda>
self._caller = lambda f: f()
File "/home/jordan/web2py/applications/randommotif/controllers/default.py", line 13, in index
defaultData = parse('defVals.txt')
File "applications/randommotif/modules/defaultValParser.py", line 6, in parse
lines = open(fileName)
IOError: [Errno 2] No such file or directory: 'defVals.txt'
我做错了什么?我应该在哪里放置defVals.txt
What am I doing wrong? Where should I place defVals.txt
我正在使用Ubuntu 12.10
I'm using Ubuntu 12.10
谢谢
乔丹
更新:
这是defaultValParser.py的源代码:
This is the source code to defaultValParser.py:
import itertools
import string
import os
from gluon import *
from gluon.custom_import import track_changes; track_changes(True)
#this returns a dictionary with the variables in it.
def parse(fileName):
moduleDir = os.path.dirname(os.path.abspath('defaultValParser.py'))
filePath = os.path.join(moduleDir, fileName)
lines = open(filePath, 'r')
#remove lines that are comments. Be sure to remove whitespace in the beginning and end of line
real = filter(lambda x: (x.strip())[0:2] != '//', lines)
parts = (''.join(list(itertools.chain(*real)))).split("<>")
names = map(lambda x: (x.split('=')[0]).strip(), parts)
values = map(lambda x: eval(x.split('=')[1]), parts)
return dict(zip(names, values))
如果我从终端导入并调用它(如果我注释掉了胶子导入),它可以很好地工作,但是如果我从web2py控制器中调用它,它将完全失败:
It works fine if I import it and call it from a terminal (provided I comment out the gluon imports), but if I call it from a web2py controller, it fails completely:
Traceback (most recent call last):
File "/home/jordan/web2py/gluon/restricted.py", line 212, in restricted
exec ccode in environment
File "/home/jordan/web2py/applications/randommotif/controllers/default.py", line 71, in <module>
File "/home/jordan/web2py/gluon/globals.py", line 188, in <lambda>
self._caller = lambda f: f()
File "/home/jordan/web2py/applications/randommotif/controllers/default.py", line 17, in index
defaultData = parse('defVals.txt')
File "applications/randommotif/modules/defaultValParser.py", line 6, in parse
IOError: [Errno 2] No such file or directory: 'defVals.txt'
推荐答案
使用基于模块__file__
路径的绝对路径:
Use an absolute path based on the __file__
path of the module:
moduledir = os.path.dirname(os.path.abspath('__file__'))
# ..
defaultData = parse(os.path.join(moduledir, 'defVals.txt'))
__file__
是当前模块的文件名,使用其中的.dirname()
为您提供模块所在的目录.我使用.abspath()
来确保您始终具有模块文件的绝对路径,避开可能会碰到的边缘情况.
__file__
is the filename of the current module, using the .dirname()
of that gives you the directory the module is in. I used .abspath()
to make sure you have an absolute path for your module file at all times, heading off some edgecases you could hit otherwise.
moduledir
是模块中的全局变量.
moduledir
is a global in your module.
这篇关于从文本文件web2py读取的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!