1

我想知道是否有人可以帮助我。我是 Python 的初学者。我想做的是输入任何字母,程序必须在带有对象列表的文本文件中找到它们。它必须以不特定的顺序打印包含所有字母的对象。例如,我有一个包含 5 个单词的文本文件:

yellow
morning
sea
soiberg
sand

我希望程序显示所有包含字母的单词"goi"

结果:

morning
soiberg

我现在拥有的是:

with open('d:\lista.txt', 'r') as inF:
   l = input("Buscar: ")
   for line in inF:
       if l[0] in line:
          if l[1] in line:
              if l[2] in line:
                 print(line)

但是如果我只想找到 2 个字母或 5 个或 7 个字母怎么办。我不知道该怎么办

4

3 回答 3

2

您可以使用all()

with open(r'd:\lista.txt', 'r') as inF:
    l = input("Buscar: ")
    for line in inF:
        if all(c in line for c in l)
          #code

例子:

>>> strs = "goi"
>>> line = "morning"
>>> all(c in line for c in strs)
True
>>> line = "soiberg"
>>> all(c in line for c in strs)
True
>>> line = "sea"
>>> all(c in line for c in strs)
False

请注意,您应该对 windows 文件路径使用原始字符串,否则'\t'文件路径中的内容将被转换为制表符空间,您将收到错误消息。

r'd:\lista.txt'
于 2013-07-07T22:51:37.383 回答
0

我会使用一个集合并在匹配线上构建一个生成器,然后对其进行迭代:

with open('input') as fin:
    letters = set(raw_input('Buscar: '))
    matches = (line for line in fin if not letters.difference(line.strip())
    for match in matches:
        # do something
于 2013-07-07T22:58:40.280 回答
0

这是使用简单工具的另一种方法:

with open(r'd:\lista.txt', 'r') as inF:
    l = input("Buscar: ")
    for line in inF:
        counter=0
        for letter in l:
            if letter in line:
                counter+=1
        if counter==len(l):
            print(line)
于 2013-07-07T23:18:01.940 回答