在一些帮助下,我希望从一堆文本文件中构建一个字符串列表,其中文件名的日期戳超过三天,输出列表只包含部分字符串,即filename = 2016_08_18_23_10_00 - 播放列表,文件中的字符串是E:\ media \ filename.mxf或D:\ media2 \ filename.mxf。我希望列表只包含filename.mxf。到目前为止,我有以下内容:
## imports modules ##
from datetime import datetime, timedelta
import os
import re
## directory ##
path = r"C:\Users\michael.lawton\Desktop\Housekeeper\Test"
## days to subtract variable ##
days_to_subtract = 3
## re-import datetime module ##
import datetime
## finds all files with date and time stamp. If statement is true adds them to list ##
lines = []
for filename in os.listdir(path):
date_filename = datetime.datetime.strptime(filename.split(" ")[0], '%Y_%m_%d_%H_%M_%S')
if date_filename < datetime.datetime.now()- datetime.timedelta(days=days_to_subtract):
with open(os.path.join(path, filename), 'r') as f:
lines.extend(f.readlines()) # put all lines into array
## opens files in array ##
print filename # debug
file = open(os.path.join(path,filename), 'r')
print file.read() # debug
rasp = file.read()
## search for all strings containing .mxf from array ##
import fnmatch
import os.path
pattern = "*.mxf"
matching = [os.path.basename(s) for s in file if fnmatch.fnmatch(s, pattern)]
print matching
# currently the output is empty i.e. []
答案 0 :(得分:0)
如果我理解正确,您希望将超过三天的所有“mxf”类型的文件放入数组中。你做的事情比你必须做的更复杂。只需检查文件名是否与您定义的模式匹配,并将这些文件添加到数组中(例如匹配文件):
## imports modules ##
from datetime import datetime, timedelta
import os
import re
import fnmatch
import os.path
## directory ##
path = r"C:\Users\michael.lawton\Desktop\Housekeeper\Test"
## days to subtract variable ##
days_to_subtract = 3
pattern = "*.mxf"
## finds all files with date and time stamp. If statement is true adds them to list ##
matchingfiles = []
for filename in os.listdir(path):
date_filename = datetime.strptime(filename.split(" ")[0], '%Y_%m_%d_%H_%M_%S')
if date_filename < datetime.now() - datetime.timedelta(days=days_to_subtract):
if fnmatch.fnmatch(filename, pattern):
matchingfiles.append(os.path.join(path, filename)) # put all matching filenames in array
# if you just want to include the filename, you can do this instead:
# matchingfiles.append(filename)
print matchingfiles
无需重新导入日期时间,您只需使用datetime.strptime
代替datetime.datetime.strptime
即可。并将所有导入放在文件的顶部,这使得阅读和维护代码变得更加容易。