有没有办法通过循环文件夹结构来查找文件名?

2024-10-06 12:44:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望能够运行一个脚本,查找包含文本和3天后的日期的特定文件名,并根据结果返回是/否响应。我想调用一个powershell脚本,该脚本将从主python脚本执行此操作。基本上,我希望脚本在名为“PACP”的子文件夹中查找一个名为test_u%date%\u deliverable.mdb的文件,例如,如果拼写错误,则返回一行记录错误。有这样的脚本的例子吗


Tags: 文件test文本脚本文件夹文件名错误记录
3条回答

像这样的

import os
from datetime import timedelta, date

# get the working directory 
dir_path = os.path.dirname(os.path.realpath(__file__)) 

# get current date
today = date.today()
formattedDate = today.strftime("%d-%m-%Y")

# search for file
for root, dirs, files in os.walk(dir_path + "/PACP"): 
    for file in files:  
        if file == "text_" + formattedDate + "_deliverable.mdb": 
            print("found file")
            quit()
    print("file not found")
    quit()

此选项用于检查目录中拼写错误的文件名

from pathlib import Path
import re

for path in Path('PACP').rglob('*.mdb'):
    m = re.match(r"(test)_(\d{6})_(deliverable)", path.name)
    
   if m is None:
     print(path.name)

例如,使用目录中的文件列表

files=[
'test_210127_deliverable.mdb',
'ttes_210127_derivrablle.mdb', #
'tset_2101327_deliveraxxle.mdb',# 
'test_210128_deliverable.mdb',
'test_210127_seliverable.mdb',#
'test_2101324_deliverable.mdb']#

for s in files:
    m = re.match(r"(test)_(\d{6})_(deliverable)",s)
    if m is None: print(s)

拼写错误的输出:

ttes_210127_derivrablle.mdb
tset_2101327_deliveraxxle.mdb
test_210127_seliverable.mdb
test_2101324_deliverable.mdb

或者一个更精确的日期匹配yyyy mm dd,可以选择3个一致的分隔符:_-.

files=[
'test_2021-01-27_deliverable.mdb',
'test_2021.01.27_deliverable.mdb',
'test_2021_01_27_deliverable.mdb',
'test_2021-21-27_deliverable.mdb', 
'test_2021-01-72_deliverable.mdb', 
'tets_2021-01-27_deliverable.mdb',
'test_2021-01-27_delivvrable.mdb']

for s in files:
    m = re.match(r"(test)_(19|20)\d\d([-._])(0[1-9]|1[012])\3(0[1-9]|[12][0-9]|3[01])_(deliverable)",s)
    if m is None: print(s)

拼写错误的输出(日期匹配更精确)

test_2021-21-27_deliverable.mdb
test_2021-01-72_deliverable.mdb
tets_2021-01-27_deliverable.mdb
test_2021-01-27_delivvrable.mdb

您不必用Python手工完成这项工作。您可以像这样使用glob模块:

import glob
date = "2021-01-01"
for f in glob.glob(f"PACP/**/test_{date}_deliverable.mdb"):
    # do something with the file matching the pattern
    print(f)

根据要对文件执行的操作,还可以使用pathlib module。Path对象还支持与glob()方法相同的语法

相关问题 更多 >