【问题标题】:How to get python to list all file extensions in the directories?如何让python列出目录中的所有文件扩展名?
【发布时间】:2020-09-22 22:29:39
【问题描述】:

我试过这个:

ListFiles = list(os.walk(os.getcwd()))
SplitTypes = []

for i in range ( 0 , len(ListFiles) ):
SplitTypes.extend(ListFiles[i].rsplit( "." ) [1])

print(SplitTypes)

但我得到的结果是这样的:

['p', 'y', 't', 'x', 't', '3', '2', ' ', 'p', 'm', '4', '0', '1', '2', '2', '4', '1', '4', 's', 'k', 'p', 'm', 'p', '4']

这些数字是因为我在该目录中的屏幕截图,时间用“。”分隔并且它们是单独分开的。

我想显示结果:

['py', 'txt', 'skp', 'png']

或类似的东西。

还有这个文件名“Screen Shot 2017-05-24 at 11.24.33 am.png”应该只显示 png 位。 在此之后,我将使用 set() 删除重复项。

【问题讨论】:

    标签: python-3.x


    【解决方案1】:

    这可以通过以下方式完成:

    import os
    
    ListFiles = os.walk(os.getcwd())
    SplitTypes = []
    for walk_output in ListFiles:
        for file_name in walk_output[-1]:
            SplitTypes.append(file_name.split(".")[-1])
    
    print(SplitTypes)
    

    os.walk 将输出作为 3 个元素元组,其中最后一个元素是文件名列表。所以我们需要遍历os.walk的输出,这将为当前目录中的文件提供一个元组,并为每个子目录中的文件提供一个额外的元组。然后我们需要获取每个元组的最后一个元素,这将为我们提供文件名列表。然后,我们将使用. 遍历文件名split 并提取扩展名,这将是刚刚使用split 生成的列表的最后一个元素。我们可以通过使用 -1 下标来提取 Python 中任何序列的最后一个元素。最后,我们将提取的扩展附加到SplitTypes

    如果您的文件夹中没有其他文件夹,那么您的问题可以通过以下方式轻松解决:

    import os
    
    SplitTypes=[]
    for file in os.listdir(os.curdir):
        SplitTypes.append(file.split('.')[-1])
    print(SplitTypes)
    

    os.listdir(path) 仅给出路径目录中的文件名。

    【讨论】:

    • 如果没有文件夹,此代码将起作用,在第一个中,我得到的结果与原始代码的第一个结果没有太大区别,唯一的区别是它只给出最后一个字母表上的扩展。例如。 txt 变成't',py 变成'y'。第二个代码运行良好,除非有文件夹。 os.listdir(path) 列出文件夹,而不仅仅是文件名(仅供参考,我使用的是 mac,这可能是原因)
    • 是的,如答案中所述,第二个代码 sn-p 仅在您没有任何其他文件夹时才有效。我再次测试了我的第一个代码 sn-p,它在我的 Ubuntu 机器上运行良好。我快速浏览了文档,找不到任何指向我使用过的功能在 Ubuntu 和 Mac 上的行为差异的内容。可能,我忽略了一些东西。
    • 但是我对 Mac OS 一点也不熟悉。您能否从循环内部打印 walk_output 变量并将输出发布到此处以获取一些示例文件夹。这将帮助我找到问题。
    • 我在我的代码中发现了问题,我使用 os.listdir 而不是 walk,现在它可以工作了,但它会打印出目录中的所有内容。甚至子目录中的文件。
    • 如果您在每次迭代中从我的代码中向我提供 walk_ouput 的值,我想我将能够解决您的问题。如果这不可能,您能否提供您正在使用的新代码以及输出?
    【解决方案2】:

    pathlib中的路径方便获取扩展 在 Python 3.4+ 中

    导入操作系统

    从路径库导入路径

    def find_extensions(dir_path,  excluded = ['', '.txt', '.lnk']):
        import os
        from pathlib import Path    
        extensions = set()
        for _, _, files in os.walk(dir_path):   
            for f in files:
                ext = Path(f).suffix.lower()
                if not ext in excluded:
                    extensions.add(ext)
        return extensions 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-20
      • 2012-02-24
      • 1970-01-01
      • 2018-04-27
      • 2012-05-29
      • 1970-01-01
      • 2011-03-02
      相关资源
      最近更新 更多