有没有一种方法可以通过循环遍历文件目录来动态生成字典

时间:2020-04-22 19:34:54

标签: python

我在一个目录中有一些像下面这样的文件,我在其中通过目录循环处理每个文件。

  • tenents.txt
  • people.txt
  • customers.txt
  • clients'.txt

我正在尝试动态创建一个字典,如下所示,我在上下两边都进行了搜索,并在此处尝试了类似的示例,但无法获得所需的输出。需要别人的帮助来确定我在做什么错:

预期输出:

[{'input' : 'tenents.txt' , 'config':'tenents.json'},{'input' : 'people.txt' , 'config':'people.json'}
 {'input' : 'customers.txt' , 'config':'customers.json'},{'input' : 'clients.txt' , 'config':'clients.json'}]

我的代码的实际输出:

[{'config': 'tenents.json','input': 'tenents.txt'}]
[{'config': 'people.json','input': 'people.txt'}]
[{'config': 'customers.json','input': 'customers.txt'}]
[{'config': 'clients.json','input': 'clients.txt'}]

为什么键从左到右顺序错误。为什么在我尝试对输入键进行排序之后,输入键还是会出现在输入键之前?

我的代码片段无效:

import os
from pprint import pprint

filelist = []
for root, dirs, files in os.walk(path):
    for file in files:
        if file.endswith(".txt"):
            keys = ['input', 'config']
            filename = os.path.join(root, file)
            cname = filename.rstrip('.txt') + '.json'
            names = [[filename, cname]]

            filelist = [{k: v for k, v in zip(keys, n)} for n in names]
            pprint(filelist)

我会感谢某人的帮助。我正在使用anaconda python 3。

1 个答案:

答案 0 :(得分:0)

以下代码似乎有效:

file_list = []
for root, dirs, files in os.walk(path):
    for file in files:
        if file.endswith('.txt'):
            file_list.append({'input': file, 'config': file.replace('.txt', '.json')})
print(file_list)

我刚刚像您一样创建了一个文件列表,并为每个文件附加了带有相应值的字典。