我正在尝试打印用户设置的日期范围内的文件列表。
这是我的示例文件:请注意文件
中没有“2015-01-01”如果我输入从2015-01-02
到2015-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
答案 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