我如何在python中读取,追加和排序文本文件的所有单词?

时间:2015-07-30 16:14:22

标签: python python-2.7

  

打开文件romeo.txt并逐行阅读。对于每一行,   使用split()函数将该行拆分为单词列表。该   程序应该建立一个单词列表。对于每行上的每个单词检查   查看单词是否已经在列表中,如果没有将其附加到列表中   名单。程序完成后,排序并打印生成的单词   按字母顺序排列。

http://www.pythonlearn.com/code/romeo.txt

这是我的代码:

fname = raw_input("Enter file name: ")
fh = open(fname)
for line in fh:
     for word in line.split():
          if word in line.split():
               line.split().append(word)
          if word not in line.split():
               continue
          print word

由于某种原因,它只返回最后一行的最后一个单词。

5 个答案:

答案 0 :(得分:0)

在循环的顶部,添加一个列表,您将收集单词。现在你只是放弃一切。

你的逻辑也是相反的,你正在丢弃你应该保存的词。

words = []
fname = raw_input("Enter file name: ")
fh = open(fname)
for line in fh:
     for word in line.split():
          if word not in words:
               words.append(word)
fh.close()

# Now you should sort the words list and continue with your assignment

答案 1 :(得分:0)

尝试以下操作,它使用set()来构建唯一的单词列表。每个单词也都是低位的,以便"" """对待是一样的。

import re

word_set = set()
re_nonalpha = re.compile('[^a-zA-Z ]+')

fname = raw_input("Enter file name: ")

with open(fname, "r") as f_input:
    for line in f_input:
        line = re_nonalpha.sub(' ', line)  # Convert all non a-z to spaces

        for word in line.split():
            word_set.add(word.lower())

word_list = list(word_set)
word_list.sort()
print word_list

这将显示以下列表:

['already', 'and', 'arise', 'bits', 'breaks', 'but', 'east', 'envious', 'fair', 'grief', 'has', 'is', 'it', 'juliet', 'kill', 'light', 'many', 'moon', 'pale', 'punctation', 'sick', 'soft', 'sun', 'the', 'this', 'through', 'too', 'way', 'what', 'who', 'window', 'with', 'yonder']

答案 2 :(得分:0)

sorted(set([w for l in open(fname) for w in l.split()])) 

答案 3 :(得分:0)

我认为你误解了/** @var foo $foo */ /** @var bar $bar */ $all = $this->getBaz($foo,$bar); 正在做什么。 line.split()将返回一个包含&#34;字词&#34;的列表在字符串line.split()中。在这里,我们解释一个&#34;字&#34; as&#34;子字符串由空格字符&#34;分隔。因此,如果line等于line"Hello, World. I <3 Python"将返回列表line.split()

当您编写["Hello,", "World.", "I", "<3", "Python"]时,您正在遍历该列表的每个元素。所以条件for word in line.split()永远都是真的!你真正想要的是你已经遇到过的#34;字的累积列表。在程序的顶部,您可以使用word in line.split()创建它。然后,对于每行中的每个单词,您都要检查

DiscoveredWords = []

知道了吗? :)现在,因为你似乎是Python的新手(顺便说一下,欢迎来到这里)这里是我编写代码的方式:

if word not in DiscoveredWords:
    DiscoveredWords.append(word)

让我们快速浏览一下这段代码,以便您了解正在发生的事情:

fname = raw_input("Enter file name: ") with open(fname) as fh: words = [word for line in fh for word in line.strip().split()] words = list(set(words)) words.sort() 是一个值得记住的便利技巧。它允许您确保您的文件被关闭!一旦python退出with open(fname) as fh块,它将自动关闭文件:D

with是另一个方便的伎俩。这是获取包含文件中所有单词的列表的更简洁方法之一!我们告诉python通过获取文件中的每一行(words = [word for line in fh for word in line.strip().split()])以及该行中的每个单词(for line in fh)来创建列表。

for word in line.strip().split()将我们的列表转换为words = list(set(words)),然后返回set。这是一种快速删除重复项的方法,因为python中的list包含唯一元素。

最后,我们使用set对列表进行排序。

希望这有用且有启发性:)

答案 4 :(得分:0)

words=list()
fname = input("Enter file name: ")
fh = open(fname).read()
fh=fh.split()

for word in fh:
    if word in words:
        continue
    else:
        words.append(word)
words.sort()
print(words)