我正在尝试从os.walk
找到的每个文件中以字符串形式返回目录名称,这是到目前为止的代码:
import os
def main():
path = '/Users/Documents/GitHub/files'
for dirpath, dirnames, filenames in os.walk(path):
for x in filenames:
print(os.path.dirname(os.path.abspath(x)))
if __name__ == "__main__":
main()
我了解到os.path.dirname()
和os.path.basename()
是将'path'传递到os.path.split()
的相应结果,但是为什么当我使用os.path.abspath()
时上述方法不起作用?>
答案 0 :(得分:2)
由于您将问题标记为python 3.x,因此您可能会发现pathlib
库很有用。
from pathlib import Path
path = Path('/Users/Documents/GitHub/files')
for p in path.rglob("*"):
if p.is_file():
print(p.parent)
答案 1 :(得分:1)
您的代码显示每个x
的当前目录,因为x
只是一个文件名(没有其父目录,存储在dirpath
中)。为什么不简单地print(dirpath)
?
如果这不能回答您的问题,您能给出预期的输出吗?
答案 2 :(得分:0)
据我了解,您需要在进入目录时打印每个文件吗? 对我来说,您的代码只需要打印root即可。 试试这个,让我知道它是否对您有帮助。
# Defined two function to print dir and file, then use for loop to walk in tree.
path = '/Users/Documents/GitHub/files'
def printfile(listdir, space):
for file in listdir:
print("/".rjust(space+1)+file)
def printdir(entrydir):
print(entrydir[0])
printfile(entrydir[2], len(entrydir[0]))
#wrap up
tree = os.walk(path)
for dir in tree:
printdir(dir)
答案 3 :(得分:0)
使用os.walk
和list comprehension的功能,这样的事情怎么样?
def get_dirnames(path) -> list:
"""Return a list of directories from the root path.
Args:
path (str): Full path to the starting directory.
"""
dir_list = [os.path.join(root, d) for root, dirs, _ in os.walk(path) for d in dirs]
return dir_list
这将从您的根路径输出以下内容:
import os
path = 'c:/users/bob/documents'
get_dirnames(path)
['c:/users/bob/documents\\Doc_Excel',
'c:/users/bob/documents\\Doc_General',
'c:/users/bob/documents\\Doc_Music',
'c:/users/bob/documents\\Doc_PDF',
'c:/users/bob/documents\\Doc_PowerPoint'
...]
如果这不是您想要的,请提供预期的输出,我们将看到我们将如何提供帮助。