1

とにかく、拡張子を含むファイル全体ではなく、ファイルのベース名のみを投稿するようにコードを変更できるかどうか疑問に思っていました..私はPythonに慣れていないので、あまり知りません.何かを変更して、完全に壊したくありません。

import glob
import os
os.chdir( "C:/headers" )

txt = open( 'C:/files.txt', 'w' )

for file in glob.glob( "*.h" ):
    with open( file ) as f:
        contents = f.read()
        if 'struct' in contents:
            txt.write( "%s\n"%file )
txt.close()

基本的に、ヘッダー ファイルのディレクトリを検索し、ファイルに構造体文字列が含まれている場合は、そのファイルを txt ファイルに出力します。ただし、実行すると、すべてのファイルが一覧表示された txt ファイルが開きますが、ファイルのベース名のみを一覧表示したいので、末尾に .h は必要ありません。

助けてください、ありがとう!

4

3 に答える 3

3
root, ext = os.path.splitext(file)
name = os.path.basename(root)

root拡張子の前のピリオドまでの指定されたファイル名の完全なパスが含まれ、name先頭のパスのないファイルの名前のみになります。

于 2013-02-06T04:39:46.183 に答える
1

おそらくこれが役立ちます:

import glob
import os
import re
os.chdir( "C:/headers" )

txt = open( 'C:/files.txt', 'w' )

for file in glob.glob( "*.h" ):
    with open( file ) as f:
        contents = f.read()    [...]
        if 'struct' in contents:
            txt.write( "%s\n"% re.sub('\.h$', '', file) )
txt.close()

幸運を!

于 2013-02-06T04:38:57.313 に答える
0

単純に 1 行で...、指定された検索ディレクトリで見つかった、要求されたファイル拡張子を持つファイルについて、見つかったファイルをファイル拡張子なしで返します...!

Found_BaseFile_Names= [(f.split('.'))[0] for f in os.listdir(SearchDir) if f.endswith('.txt')]
于 2019-10-16T19:33:54.337 に答える