任何人都可以帮我创建一个函数,该函数将使用
pathlib
library 创建某个目录下所有文件的列表吗?
这里,我有一个:
我有
-
c:\desktop\test\A\A.txt
-
c:\desktop\test\B\B_1\B.txt
-
c:\desktop\test\123.txt
我希望有一个列表它将具有上面的路径,但我的代码返回一个嵌套列表。
这是我的代码:
from pathlib import Path
def searching_all_files(directory: Path):
file_list = [] # A list for storing files existing in directories
for x in directory.iterdir():
if x.is_file():
file_list.append(x)
else:
file_list.append(searching_all_files(directory/x))
return file_list
p = Path('C:\\Users\\akrio\\Desktop\\Test')
print(searching_all_files(p))
希望任何人都可以纠正我。
你的代码返回嵌套列表,因为你在
else
语句中递归调用
searching_all_files
函数时,是将结果作为一个新列表附加到
file_list
中。
你可以通过使用
list.extend()
方法来代替
list.append()
方法来解决这个问题,
list.extend()
方法可以将一个列表的元素追加到另一个列表中。
以下是修正后的代码:
from pathlib import Path
def searching_all_files(directory: Path):
file_list = [] # A list for storing files existing in directories
for x in directory.iterdir():
if x.is_file():
file_list.append(x)
else:
# 使用 extend() 方法追加子目录中的文件列表
file_list.extend(searching_all_files(directory/x))
return file_list
p = Path('C:\\Users\\akrio\\Desktop\\Test')
print(searching_all_files(p))
这将打印出一个包含所有文件路径的扁平列表,而不会嵌套。
或者,你可以使用
Path.rglob()
方法来更简洁地实现相同的结果:
from pathlib import Path
def searching_all_files(directory: Path):
return list(directory.rglob('*.*'))
p = Path('C:\\Users\\akrio\\Desktop\\Test')
print(searching_all_files(p))
这将返回一个包含目录下所有文件路径的列表,包括子目录中的文件。
标签:python,pathlib From: 39909655