13

ヘッダーファイルでいっぱいの特定のディレクトリを検索し、各ヘッダーファイルを調べようとしています。ファイルに文字列「構造体」が含まれている場合は、プログラムにどのファイルが含まれているかを出力させたいだけです。

私はこれまでのところこれを持っていますが、正しく機能していません。それを理解するのを手伝ってもらえますか:

import glob
import os
os.chdir( "C:/headers" )
for files in glob.glob( "*.h" ):
    f = open( files, 'r' )
    for line in f:
        if "struct" in line:
            print( f )
4

2 に答える 2

14

行ではなくファイル名に関心があるようです。そのため、ファイル全体を読み取って検索することで処理を高速化できます。

...
for file in glob.glob('*.h'):
    with open(file) as f:
        contents = f.read()
    if 'struct' in contents:
        print file

このwith構造を使用すると、ファイルが適切に閉じられるようになります。f.read() 関数はファイル全体を読み取ります。

アップデート

元の投稿者は彼のコードが印刷されていないと述べていたので、デバッグ行を挿入することをお勧めします:

...
for file in glob.glob('*.h'):
    print 'DEBUG: file=>{0}<'.format(file)
    with open(file) as f:
        contents = f.read()
    if 'struct' in contents:
        print file

「DEBUG:」で始まる行が表示されない場合、glob() は空のリストを返しました。これは、間違ったディレクトリに到達したことを意味します。ディレクトリの内容とともに、ディレクトリのスペルを確認してください。

「DEBUG:」行が表示されても、意図した出力が表示されない場合は、ファイルに「構造体」が含まれていない可能性があります。その場合は、最初に cd でディレクトリに移動し、次の DOS コマンドを発行します。

find "struct" *.h
于 2013-02-05T15:33:59.747 に答える
1

これは、自分の側でテストすると機能します。

for files in glob.glob( "*.h" ):
    f = open( files, 'r' )
    file_contents = f.read()
    if "struct" in file_contents:
            print f.name
    f.close()

そうしないと、ファイル自体の名前ではなく、ファイルオブジェクトが印刷f.nameされます。

于 2013-02-05T15:27:59.847 に答える