我在目录中有多个格式文件。我正在尝试建立一个列表或字典,以使用for循环将python中类似格式的文件(扩展名)分组,但是以某种方式无法正常工作。
这是我的示例代码:
extension = ['pdf','xlsx','doc']
file_name_path=[]
file_dict ={}
for i in range(len(extension)):
for file_name in filelst:
if os.path.splitext(file_name)[-1] == extension[i]:
file_name_path.append(file_name)
file_dict[str(extension[i])]= file_name_path
file_name_path
file_dict
其中filelst是具有所有文件名的列表,例如
filelst =
['PD_CFS_PLL_OnMonSummary_2017Q2.xlsx',
'PD_Detailed_OMR_PLL_Lines_2017Q2.xlsx',
'PD_Detailed_OMR_PLL_Loans_2017Q2.xlsx',
'regexp-tip-sheet.pdf',
'SAS statistical-business-analyst certification .pdf']
答案 0 :(得分:2)
获取扩展名为键的字典的替代方法
extension = ['.pdf','.xlsx','.doc']
filelist = ['one.pdf','two.pdf','three.doc','four.xlsx'] #just for example
d = dict()
for i in extension:
d[i] = [j for j in filelist if os.path.splitext(j)[-1].lower()==i]
print(d)
输出:
{'.doc': ['three.doc'], '.xlsx': ['four.xlsx'], '.pdf': ['one.pdf', 'two.pdf']}
请注意,我将扩展列表中的点用作os.path.splitext
返回列表,最后一个元素为'.extension'
。 .lower()
用于使此解决方案不区分大小写,extension
列表中的字符串必须仅包含小写字符。
答案 1 :(得分:1)
每次看到相同的键时,您将覆盖字典值。
相反,使用列表作为值并附加。这就是defaultdict
的目的。
从集合中导入defaultdict
extension = ['pdf','xlsx','doc']
file_dict = defaultdict(list)
for file_name in filelst:
ext = os.path.splitext(file_name)[-1].lower()
if ext in extension:
file_dict[ext].append(file_name)