我试图以递归方式计算路径中的python文件和非python文件的数量。
print(files)
我遇到的一些问题是
print(files)
检查该功能是否正常工作,但它显示了我在文件夹中从未见过的更多文件(前7个文件),为什么会发生这种情况? /Library/Frameworks/Python.framework/Versions/3.5/bin/python3.5
/Users/ziyuanhan/PycharmProjects/lab7/recursive_dir_traversal.py
.DS_Store
/Users/ziyuanhan/PycharmProjects/lab7/.DS_Store
.idea
/Users/ziyuanhan/PycharmProjects/lab7/.idea
lab7.iml
/Users/ziyuanhan/PycharmProjects/lab7/lab7.iml
misc.xml
/Users/ziyuanhan/PycharmProjects/lab7/misc.xml
modules.xml
/Users/ziyuanhan/PycharmProjects/lab7/modules.xml
workspace.xml
/Users/ziyuanhan/PycharmProjects/lab7/workspace.xml
km_mi_table.py
/Users/ziyuanhan/PycharmProjects/lab7/km_mi_table.py
km_to_miles.py
/Users/ziyuanhan/PycharmProjects/lab7/km_to_miles.py
wordfrequency.py
/Users/ziyuanhan/PycharmProjects/lab7/wordfrequency.py
('/Users/ziyuanhan/PycharmProjects/lab7/wordfrequency.py', {'non_py': 0, 'py': 0})
INSERT INTO Destination_Table [new_date]
SELECT CONVERT(DATE,nullif([startdate],'NULL'),103)
from Source_Table
BTW我们必须使用递归函数,这是教授要求的强制性。
答案 0 :(得分:1)
您不需要自己递归迭代目录。您可以使用os.walk
为您生成目录,文件:
您无法更改调用方的本地变量/参数。如何返回total_python
,total_non_python
并在下面的来电中使用?
def count_file(path):
total_python, total_non_python = 0, 0
for parent, directories, files in os.walk(path):
for filename in files:
if filename.lower().endswith('.py'):
total_python += 1
else:
total_non_python += 1
return total_python, total_non_python
def main():
path = input('Enter a path to a file or directory: ')
total_python, total_non_python = count_file(path)
print(path, total_python, total_non_python)
或者,从Python 3.5开始,os.scandir
也可用。
答案 1 :(得分:1)
您可以将字典作为参数传递给函数,并更改字典中项目的值。
首先初始化字典:
counters = {'py': 0, 'other': 0}
然后在递归函数中修改它:
counters['py'] += 1
这会有效,因为词典是mutable。
答案 2 :(得分:0)
此函数采用路径名并返回(total_python, total_not_python)
。它在目录中的每个条目上调用自身。这意味着与给定代码一样合理。
def count_file(path):
if os.path.isfile(path):
if path.endswith('.py') :
return 1, 0
else:
return 0, 1
elif os.path.isdir(path):
total_python, total_not_python = 0, 0
for files in os.listdir(path):
print(files)
path = os.path.join(path, files)
subtotal_python, subtotal_python = count_file(path)
total_python += subtotal_python
total_not_python += subtotal_not_python
return total_python, total_not_python