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

只需一行...,返回找到的没有任何文件扩展名的文件,对于在给定搜索目录中找到的具有请求的文件扩展名的文件......!

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