【发布时间】:2025-12-28 14:50:06
【问题描述】:
所以,这是我的小程序。它应该打印给定目录中的所有文件 + 每个子目录中的所有文件。
import os
def listFiles(directory):
dirList = os.listdir(directory)
printList = []
for i in dirList:
i = os.path.join(directory,i)
# print(i)
if os.path.isdir(i):
printList[len(dirList):] = listFiles(i)
else:
printList.append(i)
return printList
directory = 'C:\Python32\Lib'
listFiles(directory)
a = listFiles(directory)
for i in a:
print(i)
问题是什么:os.path.isdir(i) 无法正常工作 - 例如,如果我尝试
os.path.isfile('C:\Python32\Lib\concurrent\futures\process.py')
os.path.exists('C:\Python32\Lib\concurrent\futures\process.py')
os.path.isdir('C:\Python32\Lib\concurrent\futures')
我总是得到 False 而不是 True(它适用于某些子目录)。如果我取消注释 print(i) 它会打印所有内容,但它也会打印目录 - 我只想打印文件。我该怎么办?
【问题讨论】:
-
如果我使用原始字符串(我将 r 放在字符串之前),它可以在 shell 中工作,但是如何在程序/变量中进行这项工作?
-
您想使用
.extend()而不是复杂的切片分配。 -
你有看过
os.walk()吗?它会为您完成所有这些工作。 -
是的,我知道 os.walk() 但我想像以前那样做。无论如何 .extend() 解决了这个问题!谢谢。
-
对于硬编码的任何路径,都需要注意反斜杠。
\f是换页符,可能不是您想要的。您应该使用双反斜杠C:\\Python32\\...或使用原始字符串r'C:\Python32\...'。
标签: python