在文件中查找单词

时间:2014-11-08 19:32:17

标签: python file-handling

我试图从一个文件" input.txt'中读取,一次一行,为每行编号。然后,我需要检查每一行,看看该行中的字母是否可用于制作“aardvark”字样。也可以使用大写字母,并且字母可以在整个行中传播。文本文件的内容是:

No aardv*rks here!

Only armadillos and anteaters.

Animals are run down: very awful road kill.

I prefer a quick guacamole made from avocados.

因此,第3行和第4行只应返回正数,例如第3行和第34行的" Aardvark。

我已经走到了这一步 - 而且我被卡住了!

file = open('input.txt').read().lower() 
listed = file.split('\n')  
for sentence in listed:
  a = sentence.count('a')
  r = sentence.count('r')
  d = sentence.count('d')
  v = sentence.count('v')
  k = sentence.count('k')
  if a==3 and r==2 and d==1 and v==1 and k==1:
    print('Aardvark on line '+listed[sentence])

请理解我正在通过初学者教程进行工作,所以没有任何狂野和花哨的功能会让我的小脑袋变得脆弱!

非常感谢您的期待。

修改

这是最终有效的解决方案。非常感谢你的贡献!

file = open('input.txt').read().lower() 
listed = file.split('\n')  
for index, sentence in enumerate(listed):
  a = sentence.count('a')
  r = sentence.count('r')
  d = sentence.count('d')
  v = sentence.count('v')
  k = sentence.count('k')
  if a>=3 and r>=2 and d>=1 and v>=1 and k>=1:
    print('Aardvark on line '+str(index+1))

3 个答案:

答案 0 :(得分:0)

open('input.txt').read()将文件的全部内容读入内存。因此,如果input.txt是一个足够长的文件,计算机将耗尽其可用内存。相反,尝试使用文件迭代器一次读取一行,例如

for i,listed in enumerate(open('input.txt')):
    sentence = listed.lower()
    a = sentence.count('a')
    # ... etc.

另见In Python, why do we need readlines() when we can iterate over the file handle itself?

答案 1 :(得分:0)

for n, line in enumerate(open('input.txt')):
  letters = list('aardvark')
  for c in line.lower():
    if c in letters:
      letters.remove(c)
  if not letters:
    print('Aardvark on line', n + 1)

答案 2 :(得分:0)

我知道这是一个旧线程,但是对于那些通过Grok进行此任务的人,以下代码仅使用本课程到目前为止所学的内容。希望您觉得有用!

count = 0
with open('input.txt') as f:
  for line in f:
    count += 1
    l = line.lower()
    a = l.count('a')
    d = l.count('d')
    k = l.count('k')
    r = l.count('r')
    v = l.count('v')
    if a >= 3 and d >= 1 and k >= 1 and r >=2 and v >=1:
      print('Aardvark on line', count)