我有一个包含文件夹和子文件夹的目录。在每个路径的末尾都有文件。我想制作一个包含所有文件路径的txt文件,但不包括文件夹的路径。
我在Getting a list of all subdirectories in the current directory尝试了这个建议,我的代码如下:
import os
myDir = '/path/somewhere'
print [x[0] for x in os.walk(myDir)]
它提供了所有元素(文件和文件夹)的路径,但我只想要文件的路径。有什么想法吗?
答案 0 :(得分:1)
os.walk(path)返回三个元组父文件夹,子目录和文件。
所以你可以这样做:
for dir, subdir, files in os.walk(path):
for file in files:
print os.path.join(dir, file)
答案 1 :(得分:0)
os.walk方法在每次迭代中为您提供目录,子目录和文件,因此当您循环遍历os.walk时,您必须遍历文件并将每个文件与“dir”组合。
要执行此组合,您要执行的操作是在目录和文件之间执行os.path.join
。
这是一个简单的例子来帮助说明如何遍历os.walk
from os import walk
from os.path import join
# specify in your loop in order dir, subdirectory, file for each level
for dir, subdir, files in walk('path'):
# iterate over each file
for file in files:
# join will put together the directory and the file
print(join(dir, file))
答案 2 :(得分:0)
如果您只想要路径,请按以下步骤为列表推导添加过滤器:
import os
myDir = '/path/somewhere'
print [dirpath for dirpath, dirnames, filenames in os.walk(myDir) if filenames]
这只会添加包含文件的文件夹的路径。
答案 3 :(得分:0)
def get_paths(path, depth=None):
for name in os.listdir(path):
full_path = os.path.join(path, name)
if os.path.isfile(full_path):
yield full_path
else:
d = depth - 1 if depth is not None else None
if d is None or d >= 0:
for sub_path in get_paths(full_path):
yield sub_path