python第三十讲第一题
本帖最后由 wai0512 于 2021-2-4 01:37 编辑import os
list1 = os.listdir()
print (list1)
record={}
for each in list1:
list2=each.split('.',1)
if len(list2)==1:
if '文件夹' not in record:
record['文件夹']=1
else:
record['文件夹']+=1
else:
if list2 not in record.keys():
record.setdefault('.'+list2,1)
else:
record['.'+list2] += 1
print(record)
for each in record.keys():
print('该文件夹下共有类型为【%s】的文件%d个'%(each,record))
为什么目录里有很多比如.py的文件但最后返回回来的结果如下
['autocomplete.py', 'autocomplete_w.py', 'autoexpand.py', 'browser.py', 'calltip.py', 'calltip_w.py', 'ChangeLog', 'codecontext.py', 'colorizer.py', 'config-extensions.def', 'config-highlight.def', 'config-keys.def', 'config-main.def', 'config.py', 'configdialog.py', 'config_key.py', 'CREDITS.txt', 'debugger.py', 'debugger_r.py', 'debugobj.py', 'debugobj_r.py', 'delegator.py', 'dynoption.py', 'editor.py', 'extend.txt', 'filelist.py', 'format.py', 'grep.py', 'help.html', 'help.py', 'help_about.py', 'history.py', 'HISTORY.txt', 'hyperparser.py', 'Icons', 'idle.bat', 'idle.py', 'idle.pyw', 'idle_test', 'iomenu.py', 'macosx.py', 'mainmenu.py', 'multicall.py', 'NEWS.txt', 'NEWS2x.txt', 'outwin.py', 'parenmatch.py', 'pathbrowser.py', 'percolator.py', 'pyparse.py', 'pyshell.py', 'query.py', 'README.txt', 'redirector.py', 'replace.py', 'rpc.py', 'run.py', 'runscript.py', 'scrolledlist.py', 'search.py', 'searchbase.py', 'searchengine.py', 'sidebar.py', 'squeezer.py', 'stackviewer.py', 'statusbar.py', 'textview.py', 'TODO.txt', 'tooltip.py', 'tree.py', 'undo.py', 'window.py', 'zoomheight.py', 'zzdummy.py', '__init__.py', '__main__.py', '__pycache__', '统计当前目录下每个文件类型的文件数.py']
{'.py': 1, '文件夹': 4, '.def': 1, '.txt': 1, '.html': 1, '.bat': 1, '.pyw': 1}
该文件夹下共有类型为【.py】的文件1个
该文件夹下共有类型为【文件夹】的文件4个
该文件夹下共有类型为【.def】的文件1个
该文件夹下共有类型为【.txt】的文件1个
该文件夹下共有类型为【.html】的文件1个
该文件夹下共有类型为【.bat】的文件1个
该文件夹下共有类型为【.pyw】的文件1个
你这个代码我找到了两点错误,第一点list2=each.split('.',1) 如果我有一个文件名为1.2.3.4.5.6.txt,你这样的结果list2=['1','2.3.4.5.6.txt'],正确做法是先判断是否是文件,如果不是文件就是文件夹,如果是文件的话再使用os.path.splitext分出来扩展名
第二点if list2 not in record.keys():
这句话你少了一个.
应该是if '.'+list2 not in record.keys():
按照你的写法永远执行的 record.setdefault('.'+list2,1)语句
页:
[1]