【问题标题】:Returning last created csv file from subdirectories从子目录返回最后创建的 csv 文件
【发布时间】:2019-11-21 22:49:26
【问题描述】:

这是我的目录结构。我想进入以“F3E3”开头的子目录,然后返回文件名中包含“0.1Hz”的csv。每个子目录中有两个 csv,文件名中包含“0.1Hz”。我只想返回最后创建的文件。

 DATA
      F3E319
        F3E319_TEST.csv
        F3E319_TEST_0.1Hz_11_21.csv
        F3E319_TEST_0.1Hz_11_20.csv
        F3E319_TEST_0.1Hz.png
      F3E320
        F3E320_TEST.csv
        F3E320_TESTTEST_0.1Hz_11_21.csv
        F3E320_TESTTEST_0.1Hz_11_20.csv
        F3E320_TEST_0.1Hz.png
      F3E321
        F3E320_TEST.csv
        F3E320_TEST2_0.1Hz_11_21.csv
        F3E320_TEST2_0.1Hz_11_20.csv
        F3E320_TEST_0.1Hz.png
      F3ES1
        F3ES1_TEST.csv
        F3ES1_TEST15_0.1Hz.csv

期望的输出:

DATA\F3E319\F3E319_TEST_0.1Hz_11_21.csv
DATA\F3E320\F3E320_TESTTEST_0.1Hz_11_21.csv
DATA\F3E321\F3E320_TEST2_0.1Hz_11_21.csv

我一直在使用此代码查找所有带有“0.1Hz”的csv:

import os.path
keyword = "0.1Hz"
for dirpath, dirnames, filenames in os.walk(r"\DATA"):
    for filename in [f for f in filenames if f.endswith(".csv")]:
       if keyword in filename:
          print(os.path.join(dirpath, filename))

我不知道如何只进入以“F3E3”开头的子目录,以及如何只返回最后创建的带有“0.1Hz”的csv。

我知道你可以做这样的事情,但我不确定如何将它合并到我当前的代码中:

for file in glob.glob('\DATA\F3E3*):
  print file

【问题讨论】:

    标签: python glob os.walk os.path


    【解决方案1】:

    您应该使用os.listdir 来遍历子目录和 csv 文件,以便更容易在子目录中找到最后创建的文件。由于获取文件创建时间可能会因您使用的操作系统而异(请参阅How to get file creation & modification date/times in Python?),因此我添加了creation_date 函数并使用它来对 csv 文件列表进行排序。

    import os
    import platform
    
    def creation_date(path_to_file):
        if platform.system() == 'Windows':
            return os.path.getctime(path_to_file)
        else:
            stat = os.stat(path_to_file)
            try:
                return stat.st_birthtime
            except AttributeError:
                return stat.st_mtime
    
    directory = "DATA"
    subdirs = [os.path.join(directory, fl) for fl in os.listdir(directory) if fl.startswith("F3E3")]
    for subdir in subdirs:
        filenames = [os.path.join(subdir, fl) for fl in os.listdir(subdir) if fl.endswith(".csv") and ("0.1Hz" in fl)]
        filenames=sorted(filenames, key=creation_date, reverse=True)
        print(filenames[0])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-30
      • 2015-08-17
      • 1970-01-01
      • 2015-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-30
      相关资源
      最近更新 更多