关于列表:如何使用python打印子目录名称

How to print the subdirectory name using python

我的代码扫描的目录和子目录下的文件夹"监视器",但在两个somehow打印不成功的子目录的名称。

监视器是戴尔parent目录和子目录的IO和冰是在戴尔的档案。

1
2
3
4
5
-Monitors
-------- Cab.txt
--- Dell
-------- io.txt
-------- io2.txt

我的父母和代码目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
parent_dir = 'E:\Logs\Monitors'

def files(parent_dir):
    for file in os.listdir(parent_dir):
      if os.path.isfile(os.path.join(parent_dir, file)):
        yield file

def created(file_path):
    if os.path.isfile(file_path):
        file_created =  time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(os.path.getctime(file_path)))
        return file_created


len = (item for item in files(parent_dir))
str =""
for item in len:
    str +="File Name:" + os.path.join('E:\\Logs\\Monitors\', item) +"
" \
    +"File Created on:" + created(os.path.join('
E:\\Logs\\Monitors\', item)) +"
" \
print str;

输出

1
2
3
E:Logs\Monitors\Cab.txt
E:Logs\Monitors\io.txt
E:Logs\Monitors\io2.txt

我的desired输出

1
2
3
E:Logs\Monitors\Cab.txt
E:Logs\Monitors\Dell\io.txt
E:Logs\Monitors\Dell\io2.txt

我想使用的变量,但在path.join端与错误。


不要使用os.listdir(),而是使用os.walk()遍历树中的所有目录:

1
2
3
4
5
6
7
for dirpath, dirnames, filenames in os.walk(parent_dir):
    for filename in filenames:
        full_path = os.path.join(dirpath, filename)
        print 'File Name: {}
File Created on: {}
'
.format(
            full_path, created(full_path))

os.walk()上的每一次迭代都会提供关于一个目录的信息。dirpath是该目录的完整路径,dirnamesfilenames是该位置的目录和文件名列表。只需在文件名上使用循环来处理每个文件名。


1
2
3
if os.path.isfile(os.path.join(parent_dir, file)):
str +="File Name:" + os.path.join('E:\\Logs\\Monitors\', item) +"
" \

这一行似乎绕过了子目录名。你基本上是在做下面的事情;

1
2
If file is file:
  print('E:\Logs\Monitors\' + filename)

这可能是您的问题的原因,因为您实际上没有加入子目录。

这些可能有帮助;

如何获取python中的所有直接子目录