从子目录返回上次创建的 csv 文件
Returning last created csv file from subdirectories
这是我的目录结构。我想进入以 "F3E3" 开头的子目录,然后是 return 文件名中包含“0.1Hz”的 csv。每个子目录中有两个 csv,文件名中包含“0.1Hz”。我只想return最后创建的文件。
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" 开头的子目录以及如何只 return 最后创建的带有“0.1Hz”的 csv。
我知道你可以做这样的事情,但我不确定如何将它合并到我当前的代码中:
for file in glob.glob('\DATA\F3E3*):
print file
您应该使用 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])
这是我的目录结构。我想进入以 "F3E3" 开头的子目录,然后是 return 文件名中包含“0.1Hz”的 csv。每个子目录中有两个 csv,文件名中包含“0.1Hz”。我只想return最后创建的文件。
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" 开头的子目录以及如何只 return 最后创建的带有“0.1Hz”的 csv。
我知道你可以做这样的事情,但我不确定如何将它合并到我当前的代码中:
for file in glob.glob('\DATA\F3E3*):
print file
您应该使用 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])