我正在尝试使用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}
组合,但没有用。
答案 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]