【问题标题】:Unable to list files with Python for-loop无法使用 Python for 循环列出文件
【发布时间】:2016-01-10 11:52:22
【问题描述】:

我刚刚脱离 LPTHW,我正在尝试使用重命名脚本来弄脏自己的手。

我在尝试列出目录中的文件时遇到问题,代码是:

def rename_files():
    for root, dirs, files in os.walk(path):
        dirs_len = len(dirs)
        for i in range(0, dirs_len):
            print dirs[i]

以上代码将按预期正确显示目录列表.. 但是,做这样的事情:

    for root, dirs, files in os.walk(path):
        dirs_len = len(dirs)
        for i in range(0, dirs_len):
            print dirs[i]
            print files

会在每个目录下产生一个空列表。

我通过创建一个 files_len 并将其放置在嵌套的 for 循环中进行了实验:

    for root, dirs, files in os.walk(path):
        dirs_len = len(dirs)
        files_len = len(files)
        for i in range(0, dirs_len):
            print dirs[i]
            print files_len

结果为 0。

如果我将 files_len 放在第一个 for 循环中,结果为 3,这是目录中正确的文件数。

我希望它打印如下内容:

我的图片

  • img1.png
  • img2.png

而且我只是不知道如何构造我的代码以使其按我想要的方式运行。

请指点我的方向好吗?

非常感谢,非常感谢!

-编辑- 这里的最终目标是查看每个目录,接受 raw_input 来更改文件名,一旦到达最后一个文件,就转到下一个目录,冲洗并重复。

例如:

目录1

-> 重命名 img1.png:img_1.png (

-> 重命名 img2.png:img_2.png (

-> 重命名 img3.png:img_3.png (

目录2

-> 重命名 img1.png:img_1.png (

-> 重命名 img2.png:img_2.png (

-> 重命名 img3.png:img_3.png (

以此类推,直到到达最后一个目录中的最后一个文件。

【问题讨论】:

    标签: python file for-loop


    【解决方案1】:

    你可以试试这样的

    for root, dirs, files in os.walk(path):
        print("%s:" % root)
        for f in files:
            print ("-> %s" % f)
    

    这将输出

    我的图片:

    ->img1.png

    ->img2.png

    其他文件夹:

    ->someotherfile.txt

    ...

    【讨论】:

    • 唯一的问题是它输出的是绝对路径。我试图只获取目录名称,然后循环使用类似“重命名 img1.png:img_1.png”(再次循环)“重命名 img2.png:img_2.png”(再次循环)“重命名 img3。 png: img_3.png" 等等。在进入下一个目录之前,它需要一个 raw_input 来询问将每个文件重命名为什么。
    • @DaveMelia - 只需使用 os.path.split -> print (os.path.split("/home/local/user/fun")[1])
    【解决方案2】:

    这段代码对我很有用:

    import os
    
    path = "D:\\myfolder"
    
    for root, dirs, files in os.walk(path):
        print "root:", root
        for file in files:
            print "-", file
    

    【讨论】:

      【解决方案3】:

      os.walk 函数从顶部开始遍历所有文件夹。您不必手动迭代它返回的“目录”,因为它只是当前“根”文件夹中的目录列表,而“文件”是当前“根”文件夹中的文件列表。
      因此,这应该做你想做的事:

      for root, dirs, files in os.walk( path ):
          print( "Root: %s\nTotal Files:%i" % ( root, len( files )))
          for file in files:
              print( "\t%s" % file )
      

      【讨论】:

        猜你喜欢
        • 2012-02-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-15
        • 1970-01-01
        • 2020-10-22
        相关资源
        最近更新 更多