我一直在努力学习Python一段时间.偶然的机会,我通过指向此处的Google搜索链接发生了官方教程的第6章 .当我从那个页面了解到,那些功能是模块的核心,并且可以从命令行调用这些模块,我很满意.这是我第一次尝试这两种方法,openbook.py
import nltk, re, pprint
from __future__ import division
def openbook(book):
file = open(book)
raw = file.read()
tokens = nltk.wordpunct_tokenize(raw)
text = nltk.Text(tokens)
words = [w.lower() for w in text]
vocab = sorted(set(words))
return vocab
if __name__ == "__main__":
import sys
openbook(file(sys.argv[1]))
Run Code Online (Sandbox Code Playgroud)
我想要的是这个函数可以作为模块openbook导入,以及openbook.py从命令行获取文件并对其执行所有这些操作.
当我从命令行运行openbook.py时,会发生这种情况:
gemeni@a:~/Projects-FinnegansWake$ python openbook.py vicocyclometer
Traceback (most recent call last):
File "openbook.py", line 23, in <module>
openbook(file(sys.argv[1]))
File "openbook.py", line 5, in openbook
file = open(book)
Run Code Online (Sandbox Code Playgroud)
当我尝试将其用作模块时,会发生以下情况:
>>> import openbook
>>> openbook('vicocyclometer')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'module' object is not callable
Run Code Online (Sandbox Code Playgroud)
那么,我该怎样做才能解决这个问题,并希望继续沿着漫长的蜿蜒道路走向启蒙?
对于第一个错误,您将打开文件两次:
openbook(file(sys.argv[1]))
ph0 = open(book)
Run Code Online (Sandbox Code Playgroud)
呼叫两者file()并且open()是多余的.他们都做同样的事情.选择一个或另一个:最好open().
打开(...)
open(name[, mode[, buffering]])→文件对象使用file()类型打开文件,返回文件对象.这是打开文件的首选方法.
对于第二个错误,您需要添加模块名称:
>>> import openbook
>>> openbook.openbook('vicocyclometer')
Run Code Online (Sandbox Code Playgroud)
或者将openbook()函数导入全局命名空间:
>>> from openbook import openbook
>>> openbook('vicocyclometer')
Run Code Online (Sandbox Code Playgroud)