比较字符串:文件和列表

时间:2014-05-11 05:43:31

标签: python string dictionary

我正在做一个应用程序,用户输入一个字符串,然后是所有可能的排列并删除重复。

应该逐行比较所获得的排列的单词,直到等于排列的行,并用剩余的排列重复该过程。

该文件包含以下信息:manila ana maria marta

或档案:espanol.dic

这里附上了一些代码:

# coding=utf8
from __future__ import print_function
import os, re, itertools

new_dic_file = "espanol.dic"

def uniq(lst):
    # remove repeated
    key = dict.fromkeys(lst).keys()
    lst = list(key)
    return lst

def match(chars, num_chars):
    # Get the permutations of input string
    combs = itertools.permutations(chars, num_chars)
    result = []
    for combo in combs:
        result.append("".join(combo))

    # Iterate to Spanish dictionary and compare combinations of input string
    dic = open(new_dic_file)
    aux = dic.readlines()
    del dic
    aux = uniq(aux)

    for word in result:
        for word_dic in aux:
            print()
            print(word, word_dic, end="")
            print(type(word), type(word_dic), end="")
            if word == word_dic:
                print(word)
                print("########## Found! ##########")

我正在打印那种“word”和“word_dic”,而type 2因此应该可以工作,而不是...... 我正在测试这个: 匹配(“aan”,3)

结果如下:

<type 'str'> <type 'str'>
ana marta
<type 'str'> <type 'str'>
ana ana
<type 'str'> <type 'str'>
ana manila
<type 'str'> <type 'str'>
naa maria

应该是什么:

ANA

####发现!!

如果对我的所作所为有任何疑问,请告诉我......

这是完整的代码。 test.py

提前谢谢你。

1 个答案:

答案 0 :(得分:1)

readlines方法在字符串上留下LF字符。因此从文件中读取的字符串中有一个额外的字符。这在输出中是可见的;请注意type行落在字符串下方,即使end=""语句中有print。字符串&#34; ana&#34;换行符永远不等于&#34; ana&#34;。

要解决此问题,请删除readlines()语句并将其替换为:

aux = dic.read().splitlines()

有关readlinesBest method for reading newline delimited files in Python and discarding the newlines?

的更多信息,请参阅此处

或者您可以将readlines()留在那里但添加:

aux = [s.rstrip() for s in aux]