【问题标题】:Python Directory traveling os.path运行 os.path 的 Python 目录
【发布时间】:2013-04-05 07:43:06
【问题描述】:

我尝试创建一个可以递归遍历多个目录并以分层方式打印文件列表的程序,例如:

Folder
----x.c
----x.bin
----Folder
---------x.c

我尝试使用类似(带有文件/文件夹详细信息)的程序:

#!/usr/bin/python

import os
for item in os.listdir(".") :
        if os.path.isdir(item) :
                print "-" + item + '\t' + str(os.stat(item).st_size) + "kb" + '\t' + str(os.stat(item).st_atime)
        elif os.path.isfile(item) :
                print item + '\t' + str(os.stat(item).st_size) + "kb" + '\t' + str(os.stat(item).st_atime)
        else :
                print "Nothing \n"

但是我不能进入我尝试使用的任何目录(A 是这里的目录):

#!/usr/bin/python

import os
for item in os.listdir(".") :
        if os.path.isdir(item) :
                print "-" + item + '\t' + str(os.stat(item).st_size) + "kb" + '\t' + str(os.stat(item).st_atime)
        elif os.path.isfile(item):
                print item + '\t' + str(os.stat(item).st_size) + "kb" + '\t' + str(os.stat(item).st_atime)
        else :
                print "Nothing"

for item in os.listdir("A") :
        if os.path.isdir("A") :
                print "-" + item + '\t' + str(os.stat(item).st_size) + "kb" + '\t' + str(os.stat(item).st_atime)

        elif os.path.isfile("A") :
                print "--" + item + '\t' + str(os.stat(item).st_size) + "kb" + '\t' + str(os.stat(item).st_atime)
        else :
                print "Nothing"

列表是错误的,我不明白为什么我不能从 .到 A 以及如何做。最糟糕的是,如果我继续 B(这里的第二个文件夹):

#!/usr/bin/python

import os
for item in os.listdir(".") :
        if os.path.isdir(item) :
                print "-" + item + '\t' + str(os.stat(item).st_size) + "kb" + '\t' + str(os.stat(item).st_atime)
        elif os.path.isfile(item):
                print item + '\t' + str(os.stat(item).st_size) + "kb" + '\t' + str(os.stat(item).st_atime)
        else :
                print "dunno"

for item in os.listdir("A") :
        if os.path.isdir("A") :
                print "-" + item + '\t' + str(os.stat(item).st_size) + "kb" + '\t' + str(os.stat(item).st_atime)

        elif os.path.isfile("A") :
                print "--" + item + '\t' + str(os.stat(item).st_size) + "kb" + '\t' + str(os.stat(item).st_atime)
        else :
                print "lulz"

for item in os.listdir("A/B") :
        if os.path.isfile("A/B") :
                print "---" + item + '\t' + str(os.stat(item).st_size) + "kb" + '\t' + str(os.stat(item).st_atime)
        else :
                print 'Nothing'

【问题讨论】:

    标签: python if-statement for-loop path directory


    【解决方案1】:

    我想你想用os.walk

    for (cur, dirs, files) in os.walk('.'):
        pass
    

    这将为您提供当前目录、当前目录中的目录列表和当前目录中的文件列表。

    我想你想要类似的东西

    for (cur, dirs, files) in os.walk('.'):
        depth = len(cur.split('/'))
        print "--" * depth, cur
        for fname in files:
            print "--" * (depth + 1), fname
    

    【讨论】:

      【解决方案2】:

      从这个答案中借了一点:List directory tree structure using Python

      import os
      
      def list_files(path, spaceChar=' ', spaceWidth=4):
          for root, dirs, files in os.walk(path):
              level = root.replace(path, '').count(os.sep)
              indent = spaceChar * (spaceWidth * level)
              print('{}{}/'.format(indent, os.path.basename(root)))
              subindent = spaceChar * spaceWidth * (level + 1)
              for f in files:
                  print('{}{}'.format(subindent, f))
      
      list_files(".", "-", 3)
      

      【讨论】:

      • 我觉得很好但是我真的不明白。这对我来说太难了抱歉。还是谢谢你。
      猜你喜欢
      • 2022-01-12
      • 2017-08-11
      • 2023-03-12
      • 2021-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多