简体   繁体   中英

How to open one folder at a time to acces files

I have multiple folders, in a common parent folder, say 'work'. Inside that, I have multiple sub-folders, named 'sub01', 'sub02', etc. All the folders have same files inside, for eg, mean.txt, sd.txt.

I have to add contents of all 'mean.txt' into a single file. I am stuck with, how to open subfolder one by one. Thanks.

getting all files as a list

g = open("new_file", "a+")

for files in list:
    f = open(files, 'r')
    g.write(f.read())
    f.close()

g.close()

I am not getting how to get a list of all files in the subfolder, to make this work

************EDIT*********************

found a solution os.walk() helped, but had a problem, it was random (it didn't iterate in alphabetical order) had to use sort to make it in order

import os
p = r"/Users/xxxxx/desktop/bianca_test/" # main_folder

list1 = []

for root, dirs, files in os.walk(p):
    if root[-12:] == 'native_space': #this was the sub_folder common in all parent folders
        for file in files:
            if file == "perfusion_calib_gm_mean.txt":
                list1.append(os.path.join(root, file))
list1.sort() # os.walk() iterated folders randomly; this is to overcome that

f = open("gm_mean.txt", 'a+')

for item in list1:
    g = open(item, 'r')
    f.write(g.read())
    print("writing", item)
    g.close()

f.close()

Thanks to all who helped.

As i understand it you want to collate all 'mean.txt' files into one file. This should do the job but beware there is no ordering to which file goes where. Note also i'm using StringIO() to buffer all the data since strings are immutable in Python.

import os
from io import StringIO


def main():
    buffer = StringIO()
    for dirpath, dirnames, filenames in os.walk('.'):
        if 'mean.txt' in filenames:
            fp = os.path.join(dirpath, 'mean.txt')
            with open(fp) as f:
                buffer.write(f.read())

    all_file_contents = buffer.getvalue()
    print(all_file_contents)


if __name__ == '__main__':
    main()

Here's a pseudocode to help you get started. Try to google, read and understand the solutions to get better as a programmer:

open mean_combined.txt to write mean.txt contents
open sd_combined.txt to write sd.txt contents

for every subdir inside my_dir:
    for every file inside subdir:
         if file.name is 'mean.txt':
              content = read mean.txt
              write content into mean_combined.txt
         if file.name is 'sd.txt':
              content = read sd.txt
              write content into sd_combined.txt

close mean_combined.txt
close sd_combined.txt

You need to look up how to:

  1. open a file to read its contents (hint: use open )
  2. iterate files inside directory (hint: use pathlib )
  3. write a string into a file (hint: read Input and Output )
  4. use context managers for releasing resources (hint: read with statement )

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM