Python 3.x 如何让python列出目录中的所有文件扩展名?

Python 3.x 如何让python列出目录中的所有文件扩展名?,python-3.x,Python 3.x,我试过这个: 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

我试过这个:

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']
或者类似的东西

此外,此文件名“截图2017-05-24 at 11.24.33 am.png”应仅显示png位。 在此之后,我将使用set()删除重复项。

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

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
的输出,这将为当前目录中的文件提供一个元组,为每个子目录中的文件提供一个额外的元组。然后我们需要得到每个元组的最后一个元素,这将为我们提供文件名列表。然后,我们将迭代文件名,
使用
拆分它们,并提取扩展名,该扩展名将是刚才使用
拆分
生成的列表的最后一个元素。我们可以通过使用-1下标来提取Python中任何序列的最后一个元素。最后,我们将提取的扩展附加到
SplitTypes

如果文件夹中没有其他文件夹,则可以通过以下方法轻松解决问题:

import os

SplitTypes=[]
for file in os.listdir(os.curdir):
    SplitTypes.append(file.split('.')[-1])
print(SplitTypes)
os.listdir(path)
只提供path目录中的文件名。

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

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
的输出,这将为当前目录中的文件提供一个元组,为每个子目录中的文件提供一个额外的元组。然后我们需要得到每个元组的最后一个元素,这将为我们提供文件名列表。然后,我们将迭代文件名,
使用
拆分它们,并提取扩展名,该扩展名将是刚才使用
拆分
生成的列表的最后一个元素。我们可以通过使用-1下标来提取Python中任何序列的最后一个元素。最后,我们将提取的扩展附加到
SplitTypes

如果文件夹中没有其他文件夹,则可以通过以下方法轻松解决问题:

import os

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

os.listdir(path)
只提供path目录中的文件名。

pathlib中的path便于获取扩展名 在Python 3.4中+

导入操作系统

从pathlib导入路径

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 

路径库中的路径便于获取扩展 在Python 3.4中+

导入操作系统

从pathlib导入路径

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 

如果没有文件夹,这个代码就可以工作。在第一个文件夹中,我得到的结果与原始代码的第一个结果没有太大区别,唯一的区别是它只给出了扩展名上的最后一个字母。例如,txt变为“t”,py变为“y”。第二个代码运行良好,除非有文件夹。os.listdir(path)列出了文件夹,而不仅仅是文件名(仅供参考,我正在使用mac,这可能就是原因)是的,正如答案中所提到的,第二个代码段仅在您没有任何其他文件夹时才起作用。我再次测试了我的第一个代码片段,它在我的Ubuntu机器上运行良好。我快速浏览了一下文档,没有发现任何迹象表明我使用的函数在Ubuntu和Mac上的行为有所不同。也许我忽略了一些东西,但我对MacOS一点也不熟悉。您能否从循环内部打印walk_输出变量,并将输出发布到某个示例文件夹中。这将帮助我找到问题。我在代码中发现了问题,我使用os.listdir而不是walk,现在它可以工作,但它会打印出目录中的所有内容。即使是子目录中的文件。如果您在每次迭代中为我提供代码输出的walk\u值,我想我将能够解决您的问题。如果这是不可能的,你能提供给我你正在使用的新代码和输出吗?如果没有文件夹,这个代码可以工作,在第一个代码中,我得到的结果与原始代码的第一个结果没有太大的不同,唯一的区别是它只给出扩展上的最后一个字母。例如,txt变为“t”,py变为“y”。第二个代码运行良好,除非有文件夹。os.listdir(path)列出了文件夹,而不仅仅是文件名(仅供参考,我正在使用mac,这可能就是原因)是的,正如答案中所提到的,第二个代码段仅在您没有任何其他文件夹时才起作用。我再次测试了我的第一个代码片段,它在我的Ubuntu机器上运行良好。我快速浏览了一下文档,没有发现任何迹象表明我使用的函数在Ubuntu和Mac上的行为有所不同。也许我忽略了一些东西,但我对MacOS一点也不熟悉。您能否从循环内部打印walk_输出变量,并将输出发布到某个示例文件夹中。这将帮助我找到问题。我在代码中发现了问题,我使用os.listdir而不是walk,现在它可以工作,但它会打印出目录中的所有内容。即使是子目录中的文件。如果您在每次迭代中为我提供代码输出的walk\u值,我想我将能够解决您的问题。如果这是不可能的,你能提供我的新代码,你正在使用的输出?