如何在找不到文件时继续循环

时间:2015-08-26 23:50:34

标签: python

我正在尝试打印用户设置的日期范围内的文件列表。

这是我的示例文件:请注意文件

中没有“2015-01-01”

enter image description here

如果我输入从2015-01-022015-01-05的范围,它将打印文件列表。但是,如果我从2015-01-01输入2015-01-05,则会导致错误:

OSError: (2, 'No such file or directory', '\\2015-01-01')

是否可以尝试-out-pass或continue,以便我的循环仍然继续并将2015-01-02打印到2015-01-05。并且只是拒绝找不到的文件。

这是我目前的代码:

FileNameList = []
date = start_date
while date <= end_date:
    folder_name = date.strftime(DATE_FORMAT)
    data_folder = path.join(pathDir, folder_name)
    #print data_folder  

    for filefolder in os.listdir(data_folder):      
        filefolder = data_folder + "\\" + filefolder

    FileNameList.append(filefolder)

    date += delta_one_day

for filefolder in FileNameList:
    for file in os.listdir(filefolder):
        if ".txt" in file:
            filename = filefolder + "\\" + file 
            print filename      

5 个答案:

答案 0 :(得分:2)

您可以尝试/除了循环,但更好的解决方案可能是首先只将现有目录附加到列表中:

# your code and while loop here

if os.path.isdir(data_folder):
    for filefolder in os.listdir(data_folder):      
        filefolder = data_folder + "\\" + filefolder

    if os.path.isdir(filefolder):
        FileNameList.append(filefolder)

在try / except块中放置一个for循环可能会有点混乱,因为在发生异常的情况下,您将无法继续循环。但如果你想坚持使用EAFP strategy

for filefolder in FileNameList:
    try:
        files = os.listdir(filefolder)
    except OSError:
        # You could log/print a warning here if you need.
        continue
    for file in files:
        if ".txt" in file:
            filename = filefolder + "\\" + file 
            print filename 

答案 1 :(得分:1)

你自己给出了答案。

try:
    #handles the file
except OSError:
    pass # or log it if needed.

答案 2 :(得分:0)

您可以尝试围绕os.listdir来电,但不包括:

try:
    for filefolder in os.listdir(data_folder):      
        filefolder = data_folder + "\\" + filefolder
except OSError:
    pass

答案 3 :(得分:0)

您可以使用继续声明

Python中的continue语句将控件返回到while循环的开头。 continue语句拒绝当前循环迭代中的所有剩余语句,并将控件移回循环的顶部。

continue语句可以在while和for循环中使用。

 #!/usr/bin/python

for letter in 'Python':     # First Example
   if letter == 'h':
      continue
   print 'Current Letter :', letter

var = 10                    # Second Example
while var > 0:              
   var = var -1
   if var == 5:
      continue
   print 'Current variable value :', var
print "Good bye!"

这将产生以下结果:

Current Letter : P
Current Letter : y
Current Letter : t
Current Letter : o
Current Letter : n
Current variable value : 10
Current variable value : 9
Current variable value : 8
Current variable value : 7
Current variable value : 6
Current variable value : 4
Current variable value : 3
Current variable value : 2
Current variable value : 1
Good bye!

答案 4 :(得分:0)

下面是一个示例,我们在进行for循环之前检查目录是否存在。 它可能被认为更多&#py;是pythonic&#39;使用try,除了块,但我相信在这种情况下,一个简单的检查更清晰(只是我的意见)。

for filefolder in FileNameList:
    # CHECK THAT THE DIRECTORY EXISTS HERE
    if not os.path.isdir(filefolder):
        continue # this instruction will immediately jump to the next for loop iteration, effectively skipping the current iteration.
    for file in os.listdir(filefolder):
        if ".txt" in file:
            filename = filefolder + "\\" + file 
            print filename