繁体   English   中英

通过对目录进行循环来构建 Python 字典

[英]Build a Python dictionnary by making a loop through a directory

我有一个由 5 个文件组成的文件夹:

“file42.json”、“file57.json”、“file65.json”、“file81.json”、“file90.json”。

我想构建一个看起来像这样的字典:

  {
'file42.json' : 42, 
'file97.json' : 57, 
'file57.json' : 65, 
'file81.json' : 81, 
'file90.json' : 90
 }

我尝试了以下代码段...

for f in glob.glob("*.json"):
        d = {}
        d[f]=int(f[:-5])
        print d

但我得到了这个结果,这不尊重字典应该如何:

{'file42.json': 10}
{'file57.json': 11}
{'file_65.json': 14}
{'file_81.json': 15}
{'file_90.json': 37}

我该如何使用for循环来构建合适的字典?
谢谢 !

错误是重新初始化循环中的字典。 打印每个事件看起来像是在构建字典,但实际上并非如此。

在那之后,你的切片是不正确的:你必须删除扩展名和前缀,所以简单的切片也不会切割它,所以你得到的结果不能来自你试图运行的代码。

最好的方法是通过字典理解:

>>> import glob
>>> import os
>>> d = {k: int(os.path.splitext(k)[0][-2:]) for k in globi.glob("*.json")}
>>> d
{'file97.json': 97, 'file42.json': 42}

对于值,提取非扩展部分,取2个数字并进行转换。

如果有一位或三位数字,这不起作用,因此正则表达式可能是更好的选择:

>>> import re
>>> d = {k: int(re.search("\d+", os.path.splitext(k)[0]).group(0)) for k in glob.iglob("*.json")}

首先使用os.listdir()发现您的文件夹,然后使用strip()函数删除除您要查找的数字之外的所有内容:

import os

d = {}
for file in os.listdir():
    d[file] = int(file.strip('file').strip('.json'))
print(d)

这样你得到:

 d = {
'file42.json' : 42, 
'file97.json' : 57, 
'file57.json' : 65, 
'file81.json' : 81, 
'file90.json' : 90
 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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