如何使用python打开一些特定的文件

时间:2012-07-10 11:51:14

标签: python datetime glob

我有几个名为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.txt20120707-020015.txt20120708-02 ....

3 个答案:

答案 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 loopdictionary的一些简单使用:

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)