如何解决os.walk循环检查文件是否存在
我被困在使用os.walk遍历文件夹的过程中。 我的代码如下:
import os
from datetime import timedelta
startD = date(2020,7,10)
day= timedelta(days=1)
EndD = date(2020,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 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'
我知道该循环遍历所有文件,并且清楚地表明,对于每个没有确切文件名的文件,它都将打印“无文件”。 我只想打印出丢失的精确文件名,而不是全部。
解决方法
也许是这样的。将打印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,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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。