如何一次打开一个文件夹以访问文件

时间:2019-07-01 13:56:45

标签: python

我在一个公共的父文件夹中有多个文件夹,说“工作”。在其中,我有多个子文件夹,分别名为“ sub01”,“ sub02”等。所有文件夹内部都有相同的文件,例如mean.txt,sd.txt。

我必须将所有“ mean.txt”的内容添加到一个文件中。我被困住了,如何一一打开子文件夹。谢谢。

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()

我没有得到如何获得子文件夹中所有文件的列表的方法,

************编辑*********************

找到了解决方案 os.walk()有帮助,但是有一个问题,它是随机的(它没有按字母顺序进行迭代) 必须使用排序使它顺序排列

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()

感谢所有提供帮助的人。

2 个答案:

答案 0 :(得分:0)

据我了解,您希望将所有“ mean.txt”文件整理为一个文件。这应该可以完成工作,但是请注意,没有顺序将文件放到哪里。还请注意,由于字符串在Python中是不可变的,因此我正在使用StringIO()缓冲所有数据。

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()

答案 1 :(得分:-1)

这是一个伪代码,可帮助您入门。尝试搜索,阅读和理解解决方案,以使自己成为一名程序员变得更好:

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

您需要查看如何:

  1. 打开文件以读取其内容(提示:使用open
  2. 迭代目录中的文件(提示:使用pathlib
  3. 将字符串写入文件(提示:读取Input and Output
  4. 使用上下文管理器释放资源(提示:阅读with statement