[英]How do I identify all .txt files in a directory and subdirectories in Python?
[英]how do i list existing files in a directory and subdirectories using recursion?
我想知道是否可以将所有文件放入一个列表中,即使它们存在于不同的子目录中而不使用 os.walk
我编写的 function 可以完成这项工作,但我不希望文件显示在嵌套列表中。 我需要它们在一个列表中。
import os
def cerca(dir1):
lista1 = []
for fname in os.listdir(dir1):
path = os.path.join(dir1,fname)
if fname.startswith('.') : continue
if os.path.isfile(path):
lista1.append(fname)
return lista1
def directory(dir1):
lista2 = cerca(dir1)
for fname in os.listdir(dir1):
path = os.path.join(dir1,fname)
if os.path.isdir(path):
ret = directory(path)
lista2.append(ret)
return lista2
output = [['looney-tunes.txt', [[['minnie.txt']]]], ['minnie.txt', ['looney-tunes.txt']],[['minnie.txt'], [['looney-tunes.txt']]]]
output 应该是:
['looney-tunes.txt','minnie.txt','minnie.txt','looney-tunes.txt','minnie.txt','looney-tunes.txt']
任何帮助将不胜感激
目前,您只使用list.append
方法,这就是您获得嵌套列表的原因。 如果使用list.extend
方法,则不需要展平列表:
def walk(root):
files = []
for e in os.listdir(root):
path = os.path.join(root, e)
print(path)
if os.path.isfile(path):
files.append(e)
else:
files.extend(walk(path))
return files
然后像这样调用 function:
root = "path-to-directory"
files = walk(root)
首先,我们需要初始化一个空列表, files
,以便我们可以跟踪已经迭代的文件。 现在我们只需要使用os.listdir
列出文件并简单检查它是文件还是目录。
如果它是一个文件, list.append
就可以了。
如果它是一个目录,我们需要使用list.extend
因为如果你 append 一个列表到一个列表,你只会得到嵌套列表,如下所示:
files = ["top_file.txt", ["nested_file_0.txt", "nested_file_1.txt"]]
使用extend,我们得到了这样的东西:
files = ["top_file.txt", "nested_file_0.txt", "nested_file_1.txt"]
我不知道您为什么不想使用os.walk
,因为它是递归列出目录内容的最有效方式。 如果您真的不能使用os.walk
(无论出于何种原因),请不要注意这个答案。 但是如果你可能考虑使用os.walk
,我做了一个例子,
import os
def walk(path):
filelist = []
for root, dirs, files in os.walk(path):
filelist.append(list(filter(None, root.split(os.path.sep)))[-1]) # get the directory name we are currently in without the path and append it to the list
filelist.extend(dirs + files) # extend the list with the directories and files
return filelist
要获得一个平面列表而不必展平它,您必须使用list.extend
而不是list.append
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.