[英]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.