为每个子文件夹制作字典

时间:2019-01-17 10:53:50

标签: python-3.x dictionary directory-structure

我要为主文件夹中的所有子文件夹制作单独的字典。

我有一个带有子文件夹的文件夹,其中有.txt文件,我将其中的“描述”隔离开来,并添加到带有计数的字典中。

我可以正确地使用整个文件夹,但不能将每个子文件夹分开。

子文件夹结构如下:

├───Locatie_5
│   ├───Stacked_Batch_1
│   ├───Stacked_Batch_2_Top_Bottom
│   ├───Stacked_Loc5_Hab1_05mm
│   ├───Stacked_Loc5_Hab1_1mm
│   ├───Stacked_Loc5_Hab_General_Somesinglesmissingstill
│   └───Stacked_Loc_5_Hab2_Ishetwel5niet4
├───Stacked_Half_loc_4_Hab6_Half_loc_2_4
├───Stacked_Last_Session_Rest
├───Stacked_locatie_2_4
├───Stacked_Loc4_Hab6_25mm
└───Stacked_Locatie_2

理想情况下,理想的输出字典应以文件夹命名(如果是大写字母,则在子文件夹之后),列出在文件夹的.txt文件中找到的无脊椎动物宏分类名称及其出现的次数,如下所示:

  • Locatie_5_Stacked_Batch_1 = {“” Anisus_vortex“:” 4“,” Bithynia_tentaculata“:” 2“,...}
  • Locatie_5_Stacked_Batch_2_Top_Bottom = {“ Anisus_vortex”:“ 7”,“ Bithynia_tentaculata”:“ 3”,...}
  • Stacked_Half_loc_4_Hab6_Half_loc_2_4 = {“ Anisus_vortex”:“ 0”,“ Bithynia_tentaculata”:“ 25”,...}
    • 等...

在下面的代码中,将所有描述从主文件夹及其子文件夹中汇总到一个字典中是可行的。我认为至少从第7行的dirs循环是下一步是很明智的。
对我来说,在循环中创建字典也是有意义的,然后从那里获取文件夹路径作为字符串并为其指定字典名称。

所以我想要的是以下内容:

  • 每个子文件夹的字典
  • 在每本词典中,该子文件夹中的“描述”加计数
  • 理想情况下,词典名称应为-或包括子文件夹名称。

我该怎么办?

旁注:我只需要获取描述和计数,并知道它们最终从哪个文件夹放置到另一个文件(.txt,工作表或数据库)中,所以也许会有不同之处解决方案,而不是先将它们添加到字典中?

import os
import re

taxa_Counts = dict()

for subdir, dirs, files in os.walk("D:/MacroInvertebrates_Stacked"):
    for dir in dirs:
        for file in files:
            #print os.path.join(subdir, file)
            filepath = subdir + os.sep + file

            if not filepath.endswith(".txt"):
                continue

            Current_File = open(filepath)
            for line in Current_File:
                line = line.rstrip()
                #print(line)
                if line.startswith("Description"):
                    taxa = line.split()[2:3]

                    #print(line)
                    #print(Taxon)
                    for taxon in taxa:
                        taxa_Counts[taxon]=taxa_Counts.get(taxon,0) +1 

print(taxa_Counts)

1 个答案:

答案 0 :(得分:0)

我只对第一部分进行了修改,因为您的描述提取部分正在工作。

请在下面找到python 3实现。我没有尝试过,所以请告诉我它是否无法正常工作。

import os

root_folder = r'D:/MacroInvertebrates_Stacked'
content = {}

for root, dirs, files in os.walk(root_folder):
    for subdir in dirs:
        content[os.path.join(root, subdir)] = []
    content[root] = files

list_of_dicts = []

for folder, filenames in list(content.items()):
    dict_name = string(os.path.relpath(folder, root_folder)).replace('\\', '_')
    dict_name = {}
    for filename in filenames:
        if filename.endswith('.txt'):
           with open(filename) as f:
                for line in f:
                    line = line.rstrip()
                    if line.startswith("Description"):
                        taxa = line.split()[2:3]
                        for taxon in taxa:
                            dict_name[taxon]=dict_name.get(taxon,0) +1 
    list_of_dicts.append(dict_name)

print(list_of_dicts)

list_of_dicts包含与每个子文件夹相对应的字典名称,其中包含计数。