【问题标题】:Os.walk() loop to check if file exist or notos.walk() 循环检查文件是否存在
【发布时间】:2021-01-10 16:38:48
【问题描述】:

我在使用 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”+ 文件夹中每个文件的日期这与定义的不完全一致。

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'

我知道它会遍历所有文件,并且它清楚地为每个没有确切文件名的文件打印“无文件”。 我想只打印丢失的确切文件名,而不是全部。

【问题讨论】:

  • 不完全确定你在问什么。您想在文件丢失时打印(收到警告)?

标签: python pandas loops file-exists os.walk


【解决方案1】:

也许是这样的。在循环外打印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

【讨论】:

  • 谢谢,但此代码返回的结果与我的相同。
猜你喜欢
  • 1970-01-01
  • 2021-02-20
  • 2017-09-25
  • 2015-03-31
  • 2020-08-09
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多