创建一个Python函数,打开文本文件,读取它,标记它,最后从命令行或作为模块运行

mag*_*tar 0 python nltk

我一直在努力学习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)

那么,我该怎样做才能解决这个问题,并希望继续沿着漫长的蜿蜒道路走向启蒙?

Joh*_*ica 6

执行openbook.py时出错

对于第一个错误,您将打开文件两次:

openbook(file(sys.argv[1]))
ph0 = open(book)
Run Code Online (Sandbox Code Playgroud)

呼叫两者file()并且open()是多余的.他们都做同样的事情.选择一个或另一个:最好open().

打开(...)

open(name[, mode[, buffering]]) →文件对象

使用file()类型打开文件,返回文件对象.这是打开文件的首选方法.

导入openbook模块时出错

对于第二个错误,您需要添加模块名称:

>>> import openbook
>>> openbook.openbook('vicocyclometer')
Run Code Online (Sandbox Code Playgroud)

或者将openbook()函数导入全局命名空间:

>>> from openbook import openbook
>>> openbook('vicocyclometer')
Run Code Online (Sandbox Code Playgroud)