循环浏览带有年份的月份列表以检查文件是不是存在
Posted
技术标签:
【中文标题】循环浏览带有年份的月份列表以检查文件是不是存在【英文标题】:Cycling through a list of months with years to check if file exists循环浏览带有年份的月份列表以检查文件是否存在 【发布时间】:2013-10-30 22:26:11 【问题描述】:我正在尝试循环浏览从 2012 年和 11 月开始的月份列表,一直到当前年份和月份。
start_year = "2012"
start_month = "November"
month = start_month
year = start_year
# some sort of for loop or cycle here
try:
with open(' .csv'.format(month, year)):
CSVFile = True
if CSVFile:
print "do something cool here"
except IOError:
CSVFile = False
print ""
任何关于如何实现这一目标或建议的建议或建设性的 cmet 将不胜感激。 非常感谢
【问题讨论】:
【参考方案1】:我可能会这样做:
import datetime, os
current_month = datetime.date.today().replace(day=1)
# this could be more concise if `start_month` were the month number rather than month name
possible_month = datetime.datetime.strptime('%s %s' % (start_month, start_year), '%B %Y').date()
while possible_month <= current_month:
csv_filename = possible_month.strftime('%B %Y') + '.csv'
if os.path.exists(csv_filename):
CSVFile = True
# do something cool here, and maybe break the loop if you like
possible_month = (possible_month + datetime.timedelta(days=31)).replace(day=1)
如果您需要我详细说明它的工作原理,请告诉我。
【讨论】:
@inspectorG4dget 我喜欢阅读你的转换,让我笑了:P @Hyflex:睡眠不足让我成为一个非常热闹的派对嘉宾(轻推轻推眨眼)【参考方案2】:import datetime as dt
startYear = 2012
startMonth = 11
delta = 1
curr = dt.datetime(year=startYear, month=startMonth, day=1)
now = dt.datetime.now()
endYear = now.year
endMonth = now.month
while dt.datetime(year=year+(delta/12), month=month+(delta%12),day=1) <= now:
try:
with open(' .csv'.format(month, year)):
CSVFile = True
if CSVFile:
print "do something cool here"
except IOError:
CSVFile = False
print ""
delta += 1
【讨论】:
整洁的兑换,简单有效,类似于ops post 要么轮到我忽略某些事情,要么这实际上不会增加候选日期。 @PeterDeGlopper:你是对的。我刚刚修好了。我真的应该停止编码而不睡觉或喝咖啡 我来参加你的聚会 @inspectorG4dget 去睡觉吧,感谢您的代码,但我可以看到您今天睡眠不足。 :) 感谢您的解决方案,将尝试两者并接受我认为最容易使用的一个。以上是关于循环浏览带有年份的月份列表以检查文件是不是存在的主要内容,如果未能解决你的问题,请参考以下文章