【问题标题】:Python get all the file name in a listPython获取列表中的所有文件名
【发布时间】:2021-01-08 03:30:05
【问题描述】:

问题是获取列表中特定目录下和特定条件下的所有文件名。

我们有一个名为"test_dir"的目录。

在那里,我们有子目录"sub_dir_1", "sub_dir_2", "sub_dir_3"

在每个子目录中,我们都有一些文件。

sub_dir_1 has files ['test.txt', 'test.wav']
sub_dir_2 has files ['test_2.txt', 'test.wav']
sub_dir_2 has files ['test_3.txt', 'test_3.tsv']

我最终想得到的是“目录”['sub_dir_1/test.wav', 'sub_dir_2/test.wav'] 下存在的“test.wav”列表。如您所见,条件是获取母目录下'test.wav'的每个路径。

mother_dir_name = "directory"
get_test_wav(mother_dir_name)
returns --> ['sub_dir_1/test.wav', 'sub_dir_2/test.wav']

已编辑 我已经改变了问题的方向。

我们首先有这个文件名列表

["sub_dir_1/test.wav","sub_dir_2/test.wav","abc.csv","abc.json","sub_dir_3/test.json"]

从这个列表中我想得到一个列表,其中不包含任何包含“test.wav”的路径,如下所示

["abc.csv","abc.json","sub_dir_3/test.json"]

【问题讨论】:

  • 这能回答你的问题吗? Get a filtered list of files in a directory
  • glob.glob("*/test.wav")?
  • 谢谢。好的,这样就行了。如果我想从列表中过滤掉 ['sub_dir_1/test.wav','sub_dir_2/test.wav','sub_dir_1/test.txt','someother.file', 'file_4.tsv'] 怎么办?到 ['sub_dir_1/test.wav','sub_dir_2/test.wav']

标签: python list file


【解决方案1】:

您可以为此使用 glob 模式。使用pathlib

from pathlib import Path
mother_dir = Path("directory")
list(mother_dir.glob("sub_dir_*/*.wav"))

请注意,我对要检查的子目录非常具体——任何以“sub_dir_”开头的内容。您可以根据需要更改该模式以适应您的环境。

【讨论】:

    【解决方案2】:

    使用os.walk():

    import os
    
    def get_test_wav(folder):
        found = []
        for root, folders, files in os.walk(folder):
            for file in files:
                if file == "test.wav":
                    found.append(os.path.join(root, file))
        return found
    

    或列表理解方法:

    import os
    
    def get_test_wav(folder):
        found = [f"{arr[0]}\\test.wav" for arr in os.walk(folder) if "test.wav" in arr[2]]
        return found
    

    【讨论】:

      【解决方案3】:

      我认为这可能会对您有所帮助How can I search sub-folders using glob.glob module? 制作文件夹中文件列表(使其稍后可调用)的主要方法是:

      file_path = os.path.join(motherdirectopry, 'subdirectory')
      list_files = glob.glob(file_path + "/*.wav")
      

      只需检查该链接即可了解如何将文件夹中的所有子目录连接起来。

      这还将为您提供子目录中仅以 .wav 结尾的所有文件:

      os.chdir(motherdirectory)
      glob.glob('**/*.wav', recursive=True)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-11-06
        • 1970-01-01
        • 2018-11-18
        • 1970-01-01
        • 2017-01-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多