Reputation: 883
I was wondering if there was anyway I could modify my code to only post the basename of the file, instead of the entire file including the extension.. I'm new to python, so I don't know much, and I don't want to modify something and have it completely break.
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()
Basically, what it does is search through a directory of header files, and if it has the struct string in the file, it'll print the files in a txt file. However, when I run it, the txt file opens with all the files listed, but I want it to only list the basename of the file, I don't need the .h at the end of it.
Please help, thank you!
Upvotes: 1
Views: 2932
Reputation: 1
Simply in one line..., returns the found files without any file extension, for the files found in the given search directory with the requested file extension...!
Found_BaseFile_Names= [(f.split('.'))[0] for f in os.listdir(SearchDir) if f.endswith('.txt')]
Upvotes: 0
Reputation: 420
root, ext = os.path.splitext(file)
name = os.path.basename(root)
root
will contain the entire path of the given file name up to where the period would be before the extension, name
will only be the name of the file without the leading path.
Upvotes: 3
Reputation: 354
Perhaps this will help:
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()
Good luck!
Upvotes: 1