Python处理目录中的一系列编号(日期)文件

时间:2013-11-21 16:13:52

标签: python file-io glob python-2.x

我正在尝试使用python 2.7在目录中查找一系列特定文件。 我在目录中有许多文件,名称类似于AB_yyyyjjjhhmmss_001.txt,其中y是年份,j是朱利安日期,h是小时,依此类推。每次都对应于获取某些数据的时间,而不一定是文件创建或操作的时间。我想挑选一段时间,比如从2013305010000到2013306123000并进行处理。

我有类似的东西,

import glob

def get_time (start_time = None, end_time = None):

    if start_time == None:
        start_time = input("start: ")
    if end_time == None:
        end_time = input("end: ")

    duration = str(start_time) + "-" + str(end_time)

    listing = glob.glob("*_[" + duration + "]_*")

我了解到[ ]仅用于匹配单个数字。所以我完全偏离了这里。我也试过{start_time..end_time}组合,但没有用。

2 个答案:

答案 0 :(得分:3)

如果所有文件具有相同的结构,您只需编写:

import os
import re
start = sys.argv[1]
end = sys.argv[2]
for filename in os.listdir('test'):
    if start <= filename.split('_')[1] <= end:
        print "Process %s" % filename

示例:

$ ls test
AB_2013105010000_001.txt AB_2013305010000_001.txt AB_2013306103000_001.txt 
AB_2013306123000_001.txt AB_2013316103000_001.txt

$ python t.py 2013305010000 2013306123000
Process AB_2013305010000_001.txt
Process AB_2013306103000_001.txt
Process AB_2013306123000_001.txt

答案 1 :(得分:0)

我可能会尝试

import re
import os
import datetime

def filename_to_datetime(filename):
    filedate = re.match(r'.*(\d{13}).*', filename)
    if filedate:
        return datetime.datetime.strptime(re.match(filedate.group(1), '%Y%j%H%M%S')
    else:
        raise ValueError("File has wrong format!")

def get_time(start_time, end_time):
    return [filename for filename in os.listdir('.') if
            start_time < filename_to_datetime(filename) < end_time]