0

Pythonの別の質問 フィルターディレクトリの例で構築しようとしています

見つかった行を、それが見つかったファイル名とともに追加して返そうとします。ここにコードがあります

import os

searchdir = r'C:\Python27\mycode'
searchstring = 'import sys'

def found_in_file(fname, searchstring):
    with open(fname) as infp:
        for line in infp:
            if searchstring in line:
                return True, line
        return False

with open('found.txt', 'w') as outfp:
    count = 0
    search_count = 0
    for root, dirs, files in os.walk(searchdir):
        for name in files:
            count += 1
            full_name = os.path.join(root, name)
            b_found,line = found_in_file(full_name, searchstring)
            if b_found:
                outfp.write(full_name + '\n')
                outfp.writ(line+'\n')
                search_count += 1

print 'total number of files found %d' % count
print 'number of files with search string %d' % search_count

エラーが発生しています

Traceback (most recent call last):
  File "C:/Python27/mycode/fsearch", line 20, in <module>
    b_found,line = found_in_file(full_name, searchstring)
TypeError: 'bool' object is not iterable

何かアドバイスはありますか?私は何を間違っていますか?

4

1 に答える 1

0

found_in_file がこの行にヒットした場合:

return False

aboolが返されます。しかし、ここで

b_found,line = found_in_file(full_name, searchstring)

2 つの値が返されることを期待しています。found_in_file が返されると、Python は返された値を反復して最初の 2 つの値を取得しますが、反復できない bool を返し、Python はあきらめて例外をスローしますTypeError: 'bool' object is not iterable。 bool を反復して、そこから 2 つの値をアンパックすることはできませんでした。

return False, Noneたとえば、試してみてください。

于 2013-06-05T06:38:48.977 に答える