我想以递归方式列出从当前目录开始的所有文件。 我的目录结构:
│ cat.py
│ cat2.py
│ du.py
│ README.md.txt
│
└───FirstInnerDirectory
│ file.txt
│
└───SecondInnerDirectory
file2.txt
我的剧本:
import os
def list_content_recursively(start_point):
print("Call from: " + start_point)
for entry in os.listdir(start_point):
if os.path.isfile(entry):
print("File: " + entry)
elif os.path.isdir(entry):
list_content_recursively(entry)
list_content_recursively(os.getcwd())
我的输出:
Call from: C:\Users\Username\Desktop\Programming\week02\03.Files
File: cat.py
File: cat2.py
File: du.py
Call from: FirstInnerDirectory
File: README.md.txt
我不知道为什么它没有在FirstInnerDirectory中返回文件,并且它不能将SecondInnerDirectory识别为dir obj。我还尝试更改条目以包含绝对路径,但它仍然失败。
答案 0 :(得分:4)
使用当前代码并尽可能少地修改:
import os
def list_content_recursively(start_point):
print("Call from: " + start_point)
for entry in os.listdir(start_point):
full_path = os.path.join(start_point, entry)
if os.path.isfile(full_path):
print("File: " + entry)
elif os.path.isdir(full_path):
list_content_recursively(full_path)
list_content_recursively(os.getcwd())
如您所见,在文件路径中跟踪文件时需要完整路径。
答案 1 :(得分:1)
当你这样做时:
elif os.path.isdir(entry):
list_content_recursively(entry)
entry
只是目录名,而不是它的完整路径。在递归调用函数时,还需要包含start_point
。
elif os.path.isdir(entry):
list_content_recursively(os.path.join(start_point, entry))
同样适用:
if os.path.isfile(entry):
...
elif os.path.isdir(entry):
...
entry
也应该是完整路径,您应该使用os.path.join(start_point, entry)
来替换entry
。
答案 2 :(得分:0)
您的修改后的版本,使用Map<String, String> logins = new HashMap<String, String>();
logins.put("graph.facebook.com",
AccessToken.getCurrentAccessToken().getToken());
credentialsProvider.setLogins(logins);
credentialsProvider.refresh();
,并将绝对路径传递给pathlib
和isfile
。
isdir
答案 3 :(得分:-1)
我想说问题是你不是进入子目录。你真正想要的是os.walk
递归地,对于给定的目录和子目录,返回一个元组:
因此:
def list_content(cwd, directories, files):
print("Call from: " + cwd)
for directory in directories:
print("Directory:" + directory)
for file in files:
print("File: " + file)
print()
for subdir in os.walk(os.getcwd()):
list_content(*subdir)
修改强> 我在发帖后看到你想重新实现步行,所以这里的一些帮助是另一种方法:
import os
def list_content_recursively():
cwd = os.getcwd()
print("Call from: " + cwd)
for entry in os.listdir(cwd):
if os.path.isfile(entry):
print("File: " + entry)
elif os.path.isdir(entry):
os.chdir(entry)
list_content_recursively()
os.chdir("..")
如果你想从一个任意的地方开始,你也可以将它包装在一个os.chdir
之前的函数中,否则abccd的答案仍然存在:)