Jim
Jim

Reputation: 875

Read file in unknown directory

I need to read and edit serveral files, the issue is I know roughly where these files are but not entirely.

so all the files are called QqTest.py in various different directories. I know that the parent directories are called:

mdcArray = ['MDC0021','MDC0022','MDC0036','MDC0055','MDC0057'
            'MDC0059','MDC0061','MDC0062','MDC0063','MDC0065'
            'MDC0066','MDC0086','MDC0095','MDC0098','MDC0106'
            'MDC0110','MDC0113','MDC0114','MDC0115','MDC0121'
            'MDC0126','MDC0128','MDC0135','MDC0141','MDC0143'
            'MDC0153','MDC0155','MDC0158']

but after that there is another unknown subdirectory that contains QqTest.txt

so I need to read the QqTest.txt from /MDC[number]/unknownDir/QqTest.txt

So how I wildcard read the file in python similar to how I would in bash i.e

/MDC0022/*/QqTest.txt

Upvotes: 0

Views: 2104

Answers (3)

Martin Evans
Martin Evans

Reputation: 46759

You could search your root folders as follows:

import os

mdcArray = ['MDC0021','MDC0022','MDC0036','MDC0055','MDC0057'
            'MDC0059','MDC0061','MDC0062','MDC0063','MDC0065'
            'MDC0066','MDC0086','MDC0095','MDC0098','MDC0106'
            'MDC0110','MDC0113','MDC0114','MDC0115','MDC0121'
            'MDC0126','MDC0128','MDC0135','MDC0141','MDC0143'
            'MDC0153','MDC0155','MDC0158']

for root in mdcArray:
    for dirpath, dirnames, filenames in os.walk(root):
        for filename in filenames:
            if filename == 'QqTest.txt':
                file = os.path.join(dirpath, filename)
                print "Found - {}".format(file)

This would display something like the following:

Found - MDC0022\test\QqTest.txt

The os.walk function can be used to traverse your folder structure.

To search all folders for MDC<number> in the path, you could use the following approach:

import os
import re

for dirpath, dirnames, filenames in os.walk('.'):
    if re.search(r'MDC\d+', dirpath):
        for filename in filenames:
            if filename == 'QqTest.txt':
                file = os.path.join(dirpath, filename)
                print "Found - {}".format(file)

Upvotes: 1

ahaw
ahaw

Reputation: 221

You might use os.walk. Not exactly what you wanted but will do the job.

rootDir = '.'
for dirName, subdirList, fileList in os.walk(rootDir):
    print('Found directory: %s' % dirName)

Upvotes: 0

ssundarraj
ssundarraj

Reputation: 820

You can use a Python module called glob to do this. It enables Unix style pathname pattern expansions.

import glob
glob.glob("/MDC0022/*/QqTest.txt")

If you want to do it for all items in the list you can try this.

for item in mdcArray:
    required_files = glob.glob("{0}/*/QqTest.txt".format(item))
    # process files here

Glob documentation

Upvotes: 3

Related Questions