Python对列表中的每个元素调用递归函数
我正在研究一个名为traverseDir的递归函数,在这里之前一切都进行得很顺利,我不知道如何遍历列表并对列表中的每个元素调用我的traverseDir函数。如果你能帮忙,非常感谢Python对列表中的每个元素调用递归函数,python,recursion,Python,Recursion,我正在研究一个名为traverseDir的递归函数,在这里之前一切都进行得很顺利,我不知道如何遍历列表并对列表中的每个元素调用我的traverseDir函数。如果你能帮忙,非常感谢 path = sys.argv[1] def traverseDir(path): allFile = 0 someFile = 0 if os.path.isfile(path): # base case print(sys.argv[0]) allFi
path = sys.argv[1]
def traverseDir(path):
allFile = 0
someFile = 0
if os.path.isfile(path): # base case
print(sys.argv[0])
allFile += 1
if path.endswith('.some'):
someFile += 1
else:
files = os.listdir(path)
return files
#if len(files[0]) <= 1: these 2 lines are where I can't figure out
# return traverseDir(item)
path=sys.argv[1]
def traverseDir(路径):
allFile=0
someFile=0
如果os.path.isfile(路径):#基本情况
打印(sys.argv[0])
allFile+=1
如果path.endswith('.some'):
someFile+=1
其他:
files=os.listdir(路径)
返回文件
#如果len(files[0])调用的内置函数已执行此操作。但是,为了回答您的问题,您需要遍历文件
列表。您还需要通过递归向下传递所有_文件
和一些_文件
,以便它们可以在运行时累积。您还需要返回所有_文件
和一些_文件
(python允许您以元组的形式返回多个值)。然后可以为所有\u文件
和一些\u文件
添加递归返回的值
def traverseDir(path, all_files=0, some_files=0):
# ... your existing code
files = os.listdir(path)
for f in files:
# extend the path
full_path = os.path.join(path, f)
# unroll the returned values from the recursion
rec_all_files, rec_some_files = traverseDir(full_path, all_files, some_files)
# accumulate the values
all_files += rec_all_files
some_files += rec_some_files
return all_files, some_files
这将对列出的每个文件调用traverseDir()
。反过来,该递归将对它列出的每个文件调用traverseDir()
。调用的内置函数已经完成了这项工作。但是,为了回答您的问题,您需要遍历文件
列表。您还需要通过递归向下传递所有_文件
和一些_文件
,以便它们可以在运行时累积。您还需要返回所有_文件
和一些_文件
(python允许您以元组的形式返回多个值)。然后可以为所有\u文件
和一些\u文件
添加递归返回的值
def traverseDir(path, all_files=0, some_files=0):
# ... your existing code
files = os.listdir(path)
for f in files:
# extend the path
full_path = os.path.join(path, f)
# unroll the returned values from the recursion
rec_all_files, rec_some_files = traverseDir(full_path, all_files, some_files)
# accumulate the values
all_files += rec_all_files
some_files += rec_some_files
return all_files, some_files
这将对列出的每个文件调用traverseDir()
。反过来,该递归将对它列出的每个文件调用traverseDir()
。os.listdir
import sys
import os
path = sys.argv[1]
def traverseDir(path):
allFile = 0
someFile = 0
if os.path.isfile(path):
allFile += 1
if path.endswith('.some'):
someFile += 1
else:
for file in os.listdir(path):
agAllFile, agSomeFile = traverseDir(os.path.join(path, file))
allFile += agAllFile
someFile += agSomeFile
return allFile, someFile
print traverseDir(path)
os.walk
import sys
import os
path = sys.argv[1]
def traverseDir(path):
files = [file for dirFiles in os.walk(path) for file in dirFiles[2]]
return len(files), len([file for file in files if file.endswith('.some')])
print traverseDir(path)
os.listdir
import sys
import os
path = sys.argv[1]
def traverseDir(path):
allFile = 0
someFile = 0
if os.path.isfile(path):
allFile += 1
if path.endswith('.some'):
someFile += 1
else:
for file in os.listdir(path):
agAllFile, agSomeFile = traverseDir(os.path.join(path, file))
allFile += agAllFile
someFile += agSomeFile
return allFile, someFile
print traverseDir(path)
os.walk
import sys
import os
path = sys.argv[1]
def traverseDir(path):
files = [file for dirFiles in os.walk(path) for file in dirFiles[2]]
return len(files), len([file for file in files if file.endswith('.some')])
print traverseDir(path)
len(文件[0])
是列表文件中第一个元素的长度。这就是您试图实现的吗?您正在尝试重写操作系统。walk
?len(文件[0])
是列表文件中第一个元素的长度。这就是您试图实现的吗?您试图重写os.walk
?您忘记了在递归调用中扩展path
所需的os.path.join(path,f)
。我假设此函数旨在返回所有allFile
和someFile
的总和,所以应该有更多的内容。@zondo更新为包含返回所有\u文件
和一些\u文件
@Soviut感谢您的帮助,现在在我的终端中有一个--TypeError:“NoneType”对象不可编辑。。关于最长的行,这是因为您可能没有从os.listdir()
获取文件列表。检查输出并在必要时使用if语句应用筛选。您忘记了在递归调用中扩展path
所需的os.path.join(path,f)
。我假设此函数旨在返回所有allFile
s和someFile
s的总和,所以应该有更多的内容。@zondo更新为包含返回所有\u文件
和一些\u文件
@Soviut感谢您的帮助,现在在我的终端中有一个--TypeError:“NoneType”对象不可编辑。。关于最长的行,这是因为您可能没有从os.listdir()
获取文件列表。检查输出并在必要时使用if语句应用筛选。os.listdir
仅返回基本名称。您需要预先设置每个文件名的路径:用saymap(lambda f:os.path.join(path,f),files)替换files
。
此函数用于返回所有文件和某些文件的总数。。。您能在这里返回总数吗?os.listdir
只返回基本名称。您需要预先设置每个文件名的路径:用saymap(lambda f:os.path.join(path,f),files)替换files
。
此函数用于返回所有文件和某些文件的总数。。。你能把总数还给我吗?