循环以检查文件是否存在

2024-03-29 09:39:37 发布

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

我在使用os.walk循环浏览文件夹时遇到了麻烦。 我的代码如下所示:

import os
from datetime import timedelta

startD = date(2020,7,10)
day= timedelta(days=1)
EndD = date(2020,7,13)

folder = 'somefolder'
while startD <= EndD:
    
    date=(startD.strftime("%Y%m%d"))
    file = date + 'somename'
    file2 = date + 'somene2'
    for dirpath, subdirs, files in os.walk(folder): 
        for f in files:
            if file in f or file2 in f:
                print(os.path.join(dirpath,f))
            else:
               print("no file for", date)
    startD += day

我有一个4天的时间段(从开始日期到结束日期加1天),我想知道我的“文件夹”中是否存在任何文件名(文件和文件2)。若文件存在,我希望打印其完整路径,但在另一种情况下,我希望得到通知,文件夹中并没有这样的文件名(文件和文件2)

我故意从文件夹中删除了“file”和“file2”(适用于11.7.2020),以检查else语句是否有效,但如果我运行代码,它会为文件夹中不精确的每个文件打印“no file for”+date

no file for 20200713
no file for 20200713
no file for 20200713
no file for 20200713
no file for 20200713
no file for 20200713
no file for 20200713
no file for 20200713
no file for 20200713
no file for 20200713
no file for 20200713
no file for 20200713
no file for 20200713
no file for 20200713
no file for 20200713
ETC....

我希望收到这样的结果(日期为20200710-20200714的循环):

path for 20200710 + 'somename'
path for 20200710 + 'somene2'
no file for 20200711 + 'somename'
no file for 20200711 + 'somene2'
path for 20200712 + 'somename'
path for 20200712 + 'somene2'
path for 20200713 + 'somename'
path for 20200713 + 'somene2'
path for 20200714 + 'somename'
path for 20200714 + 'somene2'

我知道循环遍历所有文件,对于没有确切文件名的每个文件,都会打印“无文件”。 我只想打印出丢失的确切文件名,而不是全部文件名


Tags: 文件pathnoin文件夹fordateos
1条回答
网友
1楼 · 发布于 2024-03-29 09:39:37

也许是这样的。将打印file not found置于循环之外,并使用标志found检查是否找到任何文件。如果循环已完成且found仍然False,则打印file not found

import os
from datetime import timedelta

startD = date(2020,7,10)
day= timedelta(days=1)
EndD = date(2020,7,13)

folder = 'somefolder'
while startD <= EndD:
    
    date=(startD.strftime("%Y%m%d"))
    file = date + 'somename'
    file2 = date + 'somene2'
    for dirpath, subdirs, files in os.walk(folder): 
        for f in files:
            found = False
            if file in f or file2 in f:
                print(os.path.join(dirpath,f))
                found = True
            else:
                pass
        
        if not found:
            print("no file for", date)

    startD += day

相关问题 更多 >