How to open every file in a folder?

I have a python script, which in the script open a file, say file1, and then do something maybe print out the total number of characters.

    filename = 'file1'
    f = open(filename, 'r')
    content =
    print filename, len(content)

Right now, I am using stdout to direct the result to my output file - output

    python >> output

However, I don't want to do this file by file manually, is there a way to take care of every single file automatically? Like

    ls | awk '{print}' | python >> output

Then the problem is how could I read the file name from standardin? or there are already some built-in functions to do the ls and those kind of work easily?


You can list all files in the current directory using:

    import os
    for filename in os.listdir(os.getcwd()):
       # do your stuff

Or you can list only some files, depending on the file pattern using the glob module:

    import glob
    for filename in glob.glob('*.txt'):
       # do your stuff

It doesn't have to be the current directory you can list them in any path you want:

    path = '/some/path/to/file'

    for filename in os.listdir(path):
        # do your stuff

    for filename in glob.glob(os.path.join(path, '*.txt')):
        # do your stuff

Or you can even use the pipe as you specified using fileinput

    import fileinput
    for line in fileinput.input():
        # do your stuff

And then use it with piping:

    ls -1 | python


Back to homepage or read more recommendations: