0

テキストファイルで「なぜ」という単語を検索し、それが何回表示されるかを出力することになっている簡単なプログラムを作成しようとしています。コードは次のとおりです。

def get():
    a = 0
    target = str(raw_input('name file > '))
    file = open(target,'r+')
    main(file)

def main(target):
    for x in target:
        if x == 'why':
           a+= 1 

    print a

file.close()

get()

しかし、どこに置くべきfile.close()ですか?main() 内の for ループに入れる必要がありますか、それともコードの最後に入れるだけですか?

4

2 に答える 2

0

file開いているオブジェクトを管理する Pythonic の方法はwithステートメントを使用することです。fileこれにより、ブロックの最後でが閉じられます。は Python に組み込まれているためfile(ファイルに追加したくない場合)、get()関数の修正バージョンは次のようになります。

def get():
    filename = raw_input('name file > ')
    with open(filename, 'r') as source:
        main(source)

は改行文字を残して の各行を反復処理するため、x == 'why'は常に と評価されることに注意してください。行全体を比較する場合は、これをオフにする必要があります。修正されたバージョンは次のようになります。Falsefor x in targettargetstripmain()

def main(target):
    print sum(line.strip() == 'why' for line in target)

各行でそれぞれcountの出現を確認したい場合は、より良いアプローチかもしれません。whysum(line.count('why') for line in target)

最後に、importこのファイルが必要な場合 (たとえば、単体テストのスイートに入れたい場合)、(あいまいな名前の)get()関数への呼び出しを次のように保護する必要があります。if __name__ == '__main__':

if __name__ == '__main__':
    get()
于 2013-07-15T17:17:37.460 に答える