Python的字母排序文件错误

时间:2017-07-04 11:07:10

标签: python

我是python&的新手。这是我的问题: 打开文件romeo.txt并逐行读取。对于每一行,使用split()方法将该行拆分为单词列表。该程序应该建立一个单词列表。对于每行上的每个单词,检查该单词是否已经在列表中,如果没有将其附加到列表中。程序完成后,按字母顺序对生成的单词进行排序和打印。

这是文件:

但柔和通过窗户窗户打破的光线

是东方,朱丽叶是太阳

出现公平的太阳并杀死羡慕的月亮

谁已经病了,脸色苍白,悲伤

期望的输出:

[' Arise','但',' It',' Juliet',#39; Who',&& #39;已经','和','休息','东','羡慕','公平&# 39;,'悲伤',''杀死','轻','月亮',&# 39;苍白','生病','软'' sun''''''' ,'什么','窗口','与',' yonder']

这是我的代码:

fname = raw_input("Enter file name: ")
fh = open(fname)

lst = list()

#loop through the text to get the lines
for line in fh:

    line = line.rstrip()

    #loop through the line to get the words       
    for word in line:
        words = line.split()

        #if a word is not in the empty list, append it       
        if not word in lst: lst.append(word)

lst.sort()
print lst

我的输出:

[' ',' A',' B','我',' J',' W', ' a',''' c',' d',' e',' f& #39;,'' h','我',' k',' l',& #39; m',' n',' o',' p',' r',' s&# 39;,'' u',' v',' w',' y']

如果你能告诉我什么是错的(只能在开头用空格而不是整个单词的第一个字母),那就太好了..

注意:我希望代码使用这些说明,而不是其他高级指令(以保持我的学习顺序)

谢谢

4 个答案:

答案 0 :(得分:0)

你应该在线上调用split(),而不是行中的文字。

for line in file:
    result = line.split()  # this returns a list of values
    for word in result:
        # check if it already is in your list of words
list.sort()

答案 1 :(得分:0)

让我们逐行采用代码

for line in fh:
    line = line.rstrip()

所以现在我们的第一个line包含"但是通过yonder窗口打破了什么光"并且它是一个字符串。

for word in line:

啊,但是现在,我们已经说过了#34;让我们重复line(一个字符串),让word成为我们经历的每一部分循环。但是line是一个完整的字符串!当您迭代这样的字符串时,您一次只能得到一个字母,这就是您在结果中看到的内容。

相反,没有那个for循环,只是像以前那样分割线:

for line in fh:
    line = line.rstrip()
    words = line.split()
    for word in words:
        if word not in lst:
            lst.append(word)

答案 2 :(得分:0)

试试这个:

with open('test.txt') as f:
    words = []
    for line in f:
        if line:
            words.extend(line.split())

    print(sorted(set(words)))

输出:

['Arise', 'But', 'It', 'Juliet', 'Who', 'already', 'and', 'breaks', 'east', 'envious', 'fair', 'grief', 'is', 'kill', 'light', 'moon', 'pale', 'sick', 'soft', 'sun', 'the', 'through', 'what', 'window', 'with', 'yonder']

答案 3 :(得分:0)

你想要的小事就是这一行

SELECT CASE 
         WHEN column1 IS NULL THEN column2
         WHEN column2 IS NULL THEN column1
         ELSE column1 || "|" || column2
       END 
  FROM someTable

这样做就是 =>单词列表

现在它是char列表(一个简单的字符串)。尝试在您的示例中打印文字并在使用 line.split()后打印文字,您将会有更好的想法。

结帐此链接> how to use split