【问题标题】:How to load a word list into Python如何将单词列表加载到 Python 中
【发布时间】:2015-06-22 08:27:30
【问题描述】:

我正在学习关于 MIT OCW 的 Python 编程入门课程。在这个问题集上,我得到了一些代码和一个文本文件。代码和文本文件在同一个文件夹中。代码如下所示:

import random 
import string

def load_words( ): 
       print "Loading word list from file..." 
       inFile = open (WORDLIST_FILENAME, 'r', 0) 
       line = inFile.readline( ) 
       wordlist = string.split (line) 
       print " ", len(wordlist), "words loaded." 
       return wordlist

def choose_word (wordlist): 
       return random.choice (wordlist)

wordlist = load_words ( )

当我按原样运行代码时,问题集说明说我应该得到这个:

Loading word list from file... 
55900 words loaded.

但由于某种原因,当我运行代码时,我得到:

Loading word list from file... 
1 words loaded

我尝试在open 函数的输入中省略第二个和第三个参数,但无济于事。可能是什么问题?

此外,当我尝试打印 wordlist 的值时,我得到了

['AA']

当我在相关函数的上下文中打印line 的值时,我得到:

AA

文本文件确实以'AA' 开头,但是后面的所有字母呢?

【问题讨论】:

  • 请同时发布 wrodlist 文件的样子
  • stackoverflow.com/questions/11555468/… 相关。一定要在那里寻找一个关于如何简单而简洁地阅读多行的好例子。
  • @AshokaLella 单词列表是一个名为 words 的文本文件,其中包含大量明显随机的字母列表
  • @user224530,我知道是随机字母的集合。您是每行一个单词还是每行多个单词?你能张贴单词表的前几行吗?
  • 感谢阿育王的帮助。单词表的开头是这样的:AAAAHAAHEDAAAHINGAAHSAALAA...然后一直持续下去...我不知道从中可以构造出多么有意义的单词

标签: python


【解决方案1】:

line = inFile.readline( ) 应该是readlines(),复数形式。
readline 只会读取一行。只读一个字的原因。
使用 readlines() 会给您一个列表,由输入文件中的换行符分隔。

【讨论】:

  • 我刚试过,但现在它给了我一个错误提示:AttributeError: 'list' object has no attribute 'split'
  • @user224530,您不能对列表进行拆分。您可能希望对列表中的单个元素进行拆分。除非您发布您的单词列表文件的样本,否则我无法进一步帮助您。如果每一行都有一个单词wordlist=inFile.readlines() 应该可以工作。否则你将不得不修改你的逻辑
【解决方案2】:

这样的原始文件:

cat wordlist.txt                                                                                                                                     
aa
bb
cc
dd
ee

像这样的python文件:

import random

def load_words(WORDLIST_FILENAME):
       print "Loading word list from file..."
       wordlist = list()
       # 'with' can automate finish 'open' and 'close' file
       with open(WORDLIST_FILENAME) as f:
            # fetch one line each time, include '\n'
            for line in f:
                # strip '\n', then append it to wordlist
                wordlist.append(line.rstrip('\n'))
       print " ", len(wordlist), "words loaded."
       print '\n'.join(wordlist)
       return wordlist

def choose_word (wordlist):
       return random.choice (wordlist)

wordlist = load_words('wordlist.txt')

然后结果:

python load_words.py                                                                                                                                 
Loading word list from file...
  5 words loaded.
aa
bb
cc
dd
ee

【讨论】:

    【解决方案3】:

    你写的函数可以在一行中读取单词。它假定所有单词都写在文本文件中的单行中,因此读取该行并通过拆分它来创建一个列表。但是,您的文本文件似乎也包含一些换行符。因此,您可以将以下内容替换为:

    line = inFile.readline( ) 
    wordlist = string.split (line) 
    

    与:

    wordlist =[] 
    for line in inFile:
        line = line.split()
        wordlist.extend(line)
    print " ", len(wordlist), "words loaded." 
    

    【讨论】:

      猜你喜欢
      • 2012-05-09
      • 1970-01-01
      • 2016-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多