我有几个名为yyyymmdd-hhmmss.csv.gz
的文件。现在我想从02am开始每天的第一个文件,逐个做一些过程。
我的档案是:
...
20120706-015923.txt
20120706-015934.txt
20120706-020008.txt
20120706-020030.txt
...
20120707-015934.txt
20120707-020005.txt
20120707-020015.txt
...
所以我想首先查看这个文件夹中的文件名,找到20120706-020008.txt
,那是当天02am的第一个文件,然后我有一个脚本来读取所有行并做一些处理。我的问题是,如何告诉这个脚本找到这些文件?
20120706-020008.txt
,20120707-020015.txt
,20120708-02
....
答案 0 :(得分:3)
您可以使用glob
模块迭代文件:
import glob
for f in glob.glob('20120707-*'):
# do something with f
上述代码表示:迭代文件名以20120707-
开头的所有文件。 *
符号与文件名的其余部分匹配。
您可以使用datetime
模块在Python代码中计算文件的前缀(请参阅documentation以查看可用于strftime
的值):
import datetime
today = datetime.date.today()
print today.strftime("%Y%m%d")
组合代码变为:
import datetime
import glob
today = datetime.date.today()
pattern = "{0}-*".format(today.strftime("%Y%m%d"))
for f in glob.glob(pattern):
# do something with f
您还可以强制glob
只应查找.txt
个文件,方法是将其包含在搜索模式中:
pattern = "{0}-*.txt".format(today.strftime("%Y%m%d"))
答案 1 :(得分:3)
for loop
和dictionary
的一些简单使用:
import glob
import datetime
dic={}
for f in glob.glob('*-*.txt'):
d = datetime.datetime.strptime(f, '%Y%m%d-%H%M%S.txt')
if d.hour < 2:
continue
if not d.day in dic or dic[d.day][0] > d.time:
dic[d.day] = (d.time, f)
for t, f in dic.values():
print f
鉴于以下文件:
20120706-015923.txt
20120706-015934.txt
20120706-020008.txt
20120706-020030.txt
20120707-015934.txt
20120707-020005.txt
20120707-020015.txt
输出将是:
20120706-020008.txt
20120707-020005.txt
答案 2 :(得分:0)
您希望按时间顺序将文件分组到02am到02am之间的时间,对它们进行排序并选择第一个:
import itertools as it
import glob
import datetime
def map_to_day_2am(fn):
# parses filename, substracts two hours and returns the date
return (datetime.strptime(fn, '%Y%m%d-%H%M%S.txt') -
datetime.timedelta(hours=2)).date()
for day, daily_fns_iter in it.groupby(sorted(glob.glob('*.txt')),
key=map_to_day_2am):
print min(daily_fns_iter)